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

 

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

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

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 79 80 81 82 83 84 < 85 > 86 87 88 89 90 91 .. 320 >> Следующая

D:\CSharpBook\Labs\ChapbBr 3'
Heap nciioi'y in use: 3S0712
Cl is gen O
C2 is gen O
C3 is yen e
G4 is gen O
Disposing Car one
Disposing Car three
Cl is цеп 1
C2 is gen 1
C3 is gen 1
C4 is gen 1
Heap nemory in use: 2Ь99Й4
Inside "Car For Car four
Disposing Car four
Inside "Car for Car two
Disposing Car two
Press any key tu continue
UE
Ж
Рис. 3.23. Взаимодействие со сборщиком мусора
Подведение итогов
Если вы уже были знакомы с каким-либо объектно-ориентированным языком, в процессе чтения этой главы вы отметите только основные отличия С# от
известного вам языка. Если же вы ранее не были связаны с объектно-ориентированным программированием, многие концепции этой главы могут оказаться
для вас новыми. Однако в любом случае информация, представленная в этой
главе, относится к основополагающим принципам любых приложений и классов .NET.
В начале этой главы были рассмотрены «три столпа» объектно-ориентированного программирования: инкапсуляция, наследование и полиморфизм. С# полностью поддерживает каждую из этих концепций. Кроме того, в этой главе была рас-
196 Глава 3 • и объектно-ориентированное программирование
смотрена структурированная обработка исключений - основной механизм для работы с информацией об ошибках в .NET.
Эта глава завершилась рассмотрением вопросов, связанных с освобождением оперативной памяти средой выполнения .NET, Мы познакомились с методом Object. Fi nail ze() и возможностями работы с ним в С#, с интерфейсом I Disposable и методом DiSOCsei), созданием деструкторов С# и средствами программного взаимодействия с объектом System.GC, представляющим сборщик мусора среды выполнения
Интерфейсы и коллекции
Эта глава посвящена применению интерфейсов в С#. Мы узнаем, как создаются и реализуются пользовательские интерфейсы и как создавать типы, поддерживающие множественное поведение. Кроме этого, мы также обсудим такие темы, как получение ссылок на интерфейсы, косвенную реализацию интерфейсов и созда
ние иерархий интерфейсов.
В конце этой главы мы рассмотрим стандартные интерфейсы, определенные в библиотеках базовых классов .NET. Вы можете использовать эти интерфейсы в своих пользовательских классах для реализации поддержки таких возможностей, как копирование объектов, перечисление объектов и сортировка объектов. Мы также познакомимся с готовыми для использования в приложениях встроенными интер фейсами, реализованными в системных классах коллекций, таких как Arrayti st, Stacl; и прочих. Эти классы определены в пространстве имен System. Col lections.
Программирование с использованием интерфейсов
Пожалуй, самую важную роль концепция интерфейсов играет в мировании. СОМ буквально построен на использовании интерфейсов: единственный способ, с помощью которого клиент СОМ может взаимодействовать с классом СОМ, основан на использовании указателя на интерфейс (а не ссылке на объект напрямую). В .NET использование интерфейсов - это уже не единственный способ реализации взаимодействия между двумя двоичными файлами (среда выполнения .NETподдерживает применение ссылок на объекты). Однако вряд ли кому-нибудь придет в голову, что интерфейсы в .NET больше не нужны. И в .NET эти синтаксические сущности — наиболее удобный способ расширить функциональность пользовательского типа без риска испортить существующий код.
Формальное определение интерфейса звучит так: интерфейс - это набор семантически связанных абстрактных членов. Количество членов, определенных
198 Глава 4 • Интерфейсы и коллекции
в конкретном интерфейсе, зависит от того, какое поведение мы пытаемся смоделировать при помощи этого интерфейса. С точки зрения синтаксиса интерфейсы в С# определяются следующим образом:
// Этот интерфейс определяет возможности "работы с углаки" геометрической фигуры
public Interface IPointy
fcyte GetMuniberOfPointsO ; // Автоматически (неявным образом) этот член
// интерфейса становится абстрактным
}
Интерфейсы .NETтакже могут поддерживать любое количество свойств (и событий). Например, интерфейс I Painty может содержать такое свойство для чтения и записи:
publ IC Interface IPointy {
Il Чтобы сделать это свойство свойством "только для чтения" или "только // для записи", достаточно просто удалить соответствующий блок set или get byte Points(get: set:)
I
В любом случае интерфейс — это не более чем именованный набор абстрактных членов, а это значит, что любой класс, реализующий этот интерфейс, должен самостоятельно полностью определять каждый из членов этого интерфейса. Таким образом, интерфейсы — это еще один способ реализации полиморфизма в приложении: поскольку в разных классах члены одних и тех же интерфейсов будут реализованы по-разному, в результате эти классы будут реагировать на одни и те же вызовы по-своему.
Наш интерфейс IPointy - это элементарный интерфейс, определяющий поведение, связанное с углами (points) геометрических фигур. В качестве примера мы будем использовать уже знакомую нам по главе 3 иерархию геометрических фигур, производных от базового класса Shape. Главная идея проста: у некоторых геометрических фигур (например, у шестиугольника — Hexagon, и треугольника— Triangle) есть углы, и в них будет реализован этот интерфейс, а у других (окружность — Circle) углов нет, и соответствующие классы этот интерфейс поддерживать не будут. Если вы знаете, что какие-то классы поддерживают известный вам интерфейс, то вы вправе ожидать, что они будут должным образом реагировать на методы этого интерфейса. Например, если в Hexagon и Triangle реализован интерфейс IPointy, то эти классы должны ожидаемым образом реагировать на метод GetNumberOfPointsO.
Предыдущая << 1 .. 79 80 81 82 83 84 < 85 > 86 87 88 89 90 91 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100