Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 86

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 80 81 82 83 84 85 < 86 > 87 88 89 90 91 92 .. 404 >> Следующая


Сом myNewCow ¦ (Cow)myAnimal;

щуNewCow.Moo();

Такое приведение типа послужит причиной возникновения исключительной си-туацнн в том случае, если исходная переменная не будет относиться к классу Cow или классу, производному от класса cow. Существуют способы указать, к какому типу принадлежит объект, но этот вопрос будет рассмотрен в следующей главе.

Полиморфизм оказывается чрезвычайно полезным методом, позволяя выполнять операции над различными объектами, происходящими от одного класса, с использованием минимального количества кода.

Обратите внимание, что использовать полиморфизм могут не только классы, у которых имеется один и тот же непосредственный класс-родитель: существует возможность таким же образом обращаться, например, к дочернему и внучатому классам, поскольку у них имеется общин класс в иерархии наследования.

И еще одно замечание. Запомните, что в C# все классы являются производными от базового класса object, который является корневым в их иерархии наследования. Следовательно, с любыми объектами можно обращаться как с экземплярами класса object. Именно поэтому функция console.WriteLine о оказывается в состоянии обрабатывать бесконечное количество комбинаций параметров при формировании строки. Каждый параметр, кроме первого, рассматривается как экземпляр

¦ класса object, в результате чего возможен вывод на экран выходного потока произвольного объекта. Для этого вызывается метод ToString() (член класса object). Мы можем переопределить этот метод посредством некоторой реализации, подходящей для нашего класса, либо просто использовать вариант по умолчанию, который возвращает имя класса (квалифицированное в соответствии с тем пространством имен, в котором оно находится).

Полиморфизм интерфейсов

Ранее мы уже ввели понятие интерфейса, который позволяет сгруппировать взаимосвязанные методы и свойства. Хотя создавать экземпляры интерфейсов подобно тому, как создаются экземпляры объектов, нельзя, мы можем использовать переменные интерфейсного типа. В этом случае появляется возможность доступа к методам и свойствам, предоставляемым этим интерфейсом, на объектах, которые его поддерживают.
172

Глава 8

Предположим, что вместо того, чтобы для описания метода EatFoodO использовать базовый класс Animal, мы включили метод EatFoodO в интерфейс с именем iconsume. Оба класса — н cow, н chicken — могут поддерживать этот интерфейс; единственное отличие в данном случае заключается в том, что онн обязательно должны иметь некоторую реализацию EatFoodO (поскольку интерфейсы сами по себе не содержат никакой реализации). Тогда мы можем получить доступ к этому методу с помощью следующего кода:

Cow myCow = new Cow О ;

Chicken myChicken = new Chicken () j IConsume consumelnterface] consumelnterface = myCow; coneumelnterface.EatFood{)i consumelnterface * myChicken; consume Inter face. EatFoodO ;

Это простой способ, позволяющий вызывать несколько различных объектов одинаковым образом, не опираясь на общий базовый класс. В приведенном выше отрывке кода осуществляется вызов метода consuminterface. EatFood о либо класса cow, либо класса Chicken — в зависимости от того, какой из экземпляров был присвоен переменной интерфейсного типа.

Взаимоотношения между объектами

Наследование — это простой тип взаимоотношений между объектами, прн котором производный класс полностью наследует свойства базового класса, причем производный класс может обладать определенным доступом к внутренней кухне своего базового класса (посредством защищенных членов). Существуют, однако, и другие ситуации, когда взаимоотношения между объектами играют важную роль.

В этом разделе вкратце рассматриваются:

? Содержание (containment) — взаимоотношения, при которых один класс содержит в себе другой класс. Это очень напоминает наследование,

но класс, содержащий в себе другой класс, может осуществлять контроль за доступом к членам содержащегося в нем класса и даже выполнять некоторую дополнительную обработку перед использованием членов вложенного класса.

? Семейства (collections) — когда некоторый класс выступает

в качестве контейнера для множества экземпляров другого класса.

Это напоминает массивы объектов, однако в данном случае имеются дополнительные возможности, включая индексирование, сортировку, изменение размеров и т, п.

Содержание

Применить содержание очень просто: достаточно использовать поле члена для хранения экземпляра объекта. Поле члена может быть общим; в этом случае пользователи объекта-контейнера смогут получить доступ к предоставляемым нм методам и свойствам таким же образом, как и в случае наследования. Однако доступ к внутренним структурам класса посредством производного класса, имеющийся в случае наследования, отсутствует.

Существует альтернативная возможность объявить содержащийся объект как частный. В этом случае ни к одному из его членов не будет непосредственного доступа пользователей, даже если эти члены описаны как общие. Вместо этого мы
Введение в объектно-ориентированное программирование
Предыдущая << 1 .. 80 81 82 83 84 85 < 86 > 87 88 89 90 91 92 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.