
Пример 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);
}
}
////////////////////////////////