Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 95

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 89 90 91 92 93 94 < 95 > 96 97 98 99 100 101 .. 320 >> Следующая

// Убить их всех!
Подведение итогов 223
}
cartot. Cl еагАП Cars ();
Console.WritetineC*Y0(i have the 1ot.\n". саПЛ СагСошк"):
Результат работы этой программы представлен на рис. 4M.
і1; DAC5hdrpBouk\Ldbs\ChaptEf4\ObiEnu». И1Э-И Von Ji,»vj- 4 ІП 1 J1,.- іч[. : Eu
Каше; d&apax: Мах upcttd" 2ИИ
flax зріїиіі: 14Й
Niintr: Porker fttix 90
Hafte S J і mho Пах ї рі:<-;ґЗ: і И
Vou have 3 in the .
Zippy is - h'i'.n! \t in ,'¦.D-'z r.
Vou have в in the lot.
РУвStS any tu IJdiH, іти-
Рис. 4.11. Применение класса Gars, созданного на основе ArrayList
Теперь настало время ответить на вопрос — а почему нельзя просто произвести класс Cars от ArrayList? Зачем потребовалось все усложнять и создавать внутри Cars вспомогательный класс и дополнительные методы? Ответ очень прост -ArrayList сам по себе работает с любыми объектами, Это значит, что при использовании классического наследования класс Cars можно было бы заполнить объектами абсолютно любых типов С#. В этом легко убедиться:
ArrayList аг = new ArrayLlstO;
аг.Add(cartot):
ar.AddC'Hello");
ar.Add(new JamesBondCarO):
ar.Add(23);
Чтобы как-то от этого защититься и запретить классу Cars содержать какие-либо объекты кроме объектов типа Саг, мы и использовали модель включения-делегирования. Средством контроля того, что поступает в наш контейнерный класс Cars, стали методы этого класса.
Код приложения ObjectEnumWilhCoIfortiorможно найти в подкаталоге Chapter 4.
Подведение итогов
Если вы работали с СОМ, то эту главу вам было просто приятно читать. Интерфейс — это набор абстрактных методов, которые должны быть реализованы в клас-¦ поддерживающем этот интерфейс. Поскольку интерфейс сам по себе не содержит никаких реализаций методов, лучше всего представлять себе интерфейс как некоторое поведение, которое должно поддерживаться реализующими этот интерфейс классами. Если два или более класса реализуют один и тот же интерфейс, то
224 Глава 4 • Интерфейсы и коллекции
вы сможете обращаться к объектам этих классов одинаково (таким образом достигается полиморфизм). В С# интерфейс определяется при помощи ключевого слова interface. Класс С# может поддерживать любое количество интерфейсов (при этом они просто перечисляются в объявлении класса через запятую). Интерфейсы могут вступать друг с другом в отношения наследования. При этом один интерфейс можно производить одновременно от нескольких базовых интерфейсов (в отличие от классов, для которых множественное наследование запрещено).
В библиотеках базовых классов .NET определено большое количество готовых стандартных интерфейсов. В этой главе мы рассмотрели наиболее важные интерфейсы, определенные в пространстве имен System.Со' lections. Вы можете использовать эти интерфейсы в своих пользовательских классах для того, чтобы реализовать в них поддержку необходимых вам возможностей, таких как клонирование объектов, сортировка и нумерация.
В завершение мы рассмотрели некоторые готовые классы для работы с наборами элементов, определенные в пространстве имен System. Co^ lections, и выяснили, как можно достичь максимальной гибкости при использовании этих классов, применив метод включения-делегирования.
Дополнительные возможности классов С#
Эта глава посвящена нескольким исключительно полезным возможностям ллгс сов С#, без которых наш рассказ о классах был бы неполон.
Мы начнем со знакомства с методом индексатора (indexer method). Это средство С# позволяет вам создавать пользовательские классы-контейнеры, к икут ренним объектам которых можно обращаться при помощи знакомых квадратных скобок ([]). Если у вас есть опыт работы с С++, то вы обнаружите, что создание метода индексатора в очень похоже на перегрузку оператора квадратных бок в С++. После того как мы познакомимся с индексатором, логично будет рассмотреть вопросы, связанные с перегрузкой операторов в С# в целом.
Далее в этой главе будут рассмотрены три технологии, которые можно использовать для организации двустороннего взаимодействия объектов в нашем приложении. Первая технология — это применение делегатов, которые фактически: являются безопасными с точки зрения типов указателями на функции. Вторая технология — это протокол событий С#, который основан на использовании тех же делегатов. И наконец, мы рассмотрим вопросы, связанные с применением пользовательских интерфейсов для организации двустороннего взаимодействия (предмет, хорошо знакомый тем, кто пришел из мира СОМ).
В завершение главы мы рассмотрим документирование типов с использованием атрибутов XML, а также познакомимся с тем, как среда Visual Studio.NET может автоматически создавать web-документацию для ваших проектов. Несмотря на то что это вряд ли можно отнести к дополнительным возможностям С#, в полезности этих средств можно не сомневаться.
Создание пользовательского индексатора
Многие программисты давным-давно знакомы с тем, как можно обращаться к ментам контейнера при помощи оператора индекса (во многих языках программирования этот оператор выглядит как квадратные скобки — []).
Предыдущая << 1 .. 89 90 91 92 93 94 < 95 > 96 97 98 99 100 101 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100