Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОП-Примеры / Компонент-коллекции-контейнер.doc
Скачиваний:
13
Добавлен:
12.03.2015
Размер:
63.49 Кб
Скачать

Пример 3.2. Использование класса ReadOnlyCollectionBase.

/////////////////////////

// C++/CLI

#include "stdafx.h"

#using <mscorlib.dll>

using namespace System;

using namespace System::Collections;

public ref class OurCollection : public ReadOnlyCollectionBase

{

public:

OurCollection (IList^ list)

{InnerList -> AddRange (list);}

};

static void OutputCollection (OurCollection ^ourCol)

{

IEnumerator^ ourEnumerator= ourCol -> GetEnumerator ( );

while (ourEnumerator -> MoveNext ( ))

Console::WriteLine ("{0}", ourEnumerator -> Current);

Console::WriteLine ( );

}

void main ( )

{

// Создать список ourAL для коллекции

ArrayList^ ourAL = gcnew ArrayList ( );

ourAL -> Add ("one");

ourAL -> Add ("two");

// Создать коллекцию ourCol, состоящую из элементов списка ourAL

OurCollection^ ourCol = gcnew OurCollection (ourAL);

// Получить содержимое элементов коллекции, используя нумератор

OutputCollection (ourCol);

}

/////////////////////////

// C#

using System;

using System.Collections;

namespace Cs6_collect_3s

{

public class OurCollection : ReadOnlyCollectionBase

{

public OurCollection (IList list)

{InnerList.AddRange (list);}

static public void OutputCollection (OurCollection ourCol)

{ IEnumerator ourEnumerator= ourCol.GetEnumerator( );

while (ourEnumerator.MoveNext ( ))

Console.WriteLine ("{0}", ourEnumerator.Current);

Console.WriteLine ( );

}

static void Main (string[] args)

{

// Создать список ourAL для коллекции

ArrayList ourAL = new ArrayList ( );

ourAL.Add ("one");

ourAL.Add ("two");

// Создать коллекцию, состоящую из элементов списка ourAL

OurCollection ourCol = new OurCollection (ourAL);

// Получить содержимое элементов коллекции, используя

// нумератор

OutputCollection (ourCol);

}

}

}

///////////////////////////////////

Пример 4.1. C# программа с компонентом и контейнером.

/////////////////////////

// C#

// Контейнер класса System.ComponentModel.Container

// и компонент Compnt, наследующий классс Component

using System;

using System.Collections;

using System.ComponentModel;

class Compnt: Component // Компонент

{

Int numCompnt; // Номер компонента

// Конструктор

public Compnt (int NumCompnt)

{

numCompnt= NumCompnt;

}

// Cвойство Number

public int Number

{

get {return numCompnt;} // Возвратить номер

}

}

class Test

{

static void Main ( )

{

Container contA= new Container ( );// Создать объект контейнера

Compnt comp1= new Compnt (1); // Создать первый объект

// компонента

contA.Add (comp1); // Включить объект первого компонента comp1.Site.Name= "aaa"; // Дать имя"aaa" первому объекту

Compnt comp2= new Compnt (2); // Создать второй объект

contA.Add (comp2); // Включить второй объект в коллекцию

comp2.Site.Component.Site.Component.Site.Name="bbb"; // Дать

// имя="bbb" второму объекту

contA.Remove (comp1); // Удалить первый объект из коллекции

// или comp2.Site.Container.Remove (comp1);

Compnt comp3= new Compnt (3); // Создать третий объект

contA.Add (comp3, "ccc"); // Включить третий объект

// с именем"ccc" в коллекцию

// Просмотр объектов компонента Compnt из коллекции объекта

// contA контейнера

ComponentCollection comList= contA.Components; // Получить

// коллекцию

IEnumerator inum= comList.GetEnumerator ( ); // Получить

// нумератор

while (inum.MoveNext ( )) // Перебрать коллекцию

{

Compnt cm= (Compnt) inum.Current; // Текущий объект

Console.WriteLine ("Номер: " + cm.Number);

Console.WriteLine ("Компонент: " + cm.Site.Component);

Console.WriteLine ("Контейнер: " + cm.Site.Container);

Console.WriteLine ("Имя сайта: " + cm.Site.Name);

}

}

}

Пример 4.2. C++/CLI программа с контейнером и компонентом.

/////////////////////////

// C++/CLI

// Контейнер класса Contr, использующий класс Container,

// и компоненты класса Compnt, наследующие класс Component

#include "stdafx.h"

#using <System.dll>

using namespace System;

using namespace System::Collections;

using namespace System::ComponentModel;

ref class Compnt: public Component // Компонент

{

private:

int numCompnt; // Номер компонента

String^ infCompnt; // Информация

public:

// Конструктор, устанавливающий необязательные номер и информацию

Compnt (int NumCompnt, String^ InfCompnt)

{

numCompnt= NumCompnt;

infCompnt= InfCompnt;

}

// Необязательное свойство Number

property int Number

{

int get(){return numCompnt;} // Возвратить номер

}

// Необязательное свойство Inf

property String^ Inf

{

String^ get(){return infCompnt;} // Возвратить информацию

}

};

void main ( )

{

Container ^cntrA= gcnew Container ( ); // Создать объект cntrA контейнера

try

{

Compnt ^cmpnt1= gcnew Compnt (1, "Inf1"); // Создать первый объект

Compnt ^cmpnt2= gcnew Compnt (2, "Inf2"); // Создать второй объект

cntrA -> Add (cmpnt1); // Включить первый объект компонента

cntrA -> Add (cmpnt2); // Включить второй объект компонента

}

catch (SystemException ^e)

{

Console::WriteLine ("Error description: {0}", e -> Message);

}

ComponentCollection^ comList= cntrA -> Components; // Получить коллекцию

IEnumerator ^inum= comList -> GetEnumerator ( ); // Получить нумератор

while (inum -> MoveNext ( )) // Перебрать коллекцию

{

Compnt ^cm= (Compnt^) inum->Current; // Текущий объект

Console::Write ("Номер: ");

Console::WriteLine (cm -> Number);

Console::WriteLine( "Информация: {0}", cm -> Inf);

Console::WriteLine ("Компонент: {0}", cm -> Site -> Component);

Console::WriteLine ("Контейнер: {0}", cm -> Site -> Container);

Console::WriteLine ( "Имя сайта: {0}", cm -> Site -> Name);

}

}

////////////////////////////////

Соседние файлы в папке КОП-Примеры