Console.Write(b + " ");

Console.WriteLine ();

}

}

Вот к какому результату приводит выполнение этой программы.

4 3 6 4 7 9

True True False True

В данном примере массив, состоящий из возвращаемых по очереди объектов, передается конструктору классаMyClass.Тип этого массива указывает в качестве аргумента типа в конструкторе классаMyClass.

МетодGetEnumerator() оперирует данными обобщенного типаТи возвращает перечислитель типаIEnumerator.Следовательно, итератор, определенный в классеMyClass,способен перечислять данные любого типа.

Инициализаторы коллекций

В С# имеется специальное средство, называемоеинициализатором коллекциии упрощающее инициализацию некоторых коллекций. Вместо того чтобы явно вызывать методAdd (), при создании коллекции можно указать список инициализаторов. После этого компилятор организует автоматические вызовы методаAdd (), используя значения из этого списка. Синтаксис в данном случае ничем не отличается от инициализации массива. Обратимся к следующему примеру, в котором создается коллекция типаList,инициализируемая символами С, А, Е, В, D и F.

List 1st = new List() { 'С1,    'А1,    'Е1,    'В1,    1D1,    1F1 };

После выполнения этого оператора значение свойства1st. Countбудет равно 6, поскольку именно таково число инициализаторов. А после выполнения следующего цикла foreach:

foreach(ch in 1st)

Console.Write(ch + " ");

получится такой результат:

С A E В D F

Для инициализации коллекции типаLinkedListcTKey, TValue>,в которой хранятся пары "ключ-значение", инициализаторы приходится предоставлять парами, как показано ниже.

SortedListcint, string> 1st =

new SortedListcint, string>() { {1, "один11}, {2, "два" },    {3,    "три"}    };

Компилятор передаст каждую группу значений в качестве аргументов методуAdd (). Следовательно, первая пара инициализаторов преобразуется компилятором в вызовAdd(1, "один").

Компилятор вызывает методAdd() автоматически для ввода инициализаторов в коллекцию, и поэтому инициализаторы коллекций можно использовать только в коллекциях, поддерживающих открытую реализацию методаAdd (). Это означает, что инициализаторы коллекций нельзя использовать в коллекциях типаStack, Stack, QueueилиQueue,поскольку в них методAdd() не поддерживается. Их нельзя применять также в тех коллекциях типаLinkedList,где методAdd() предоставляется как результат явной реализации соответствующего интерфейса.

ГЛАВА 26 Сетевые средства подключения к Интернету

Перейти на страницу:

Похожие книги