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

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 91 92 93 94 95 96 < 97 > 98 99 100 101 102 103 .. 404 >> Следующая


После добавления ссылки мы получили возможность просмотреть перечень доступных классов с помощью Object Browser, Поскольку один из двух классов — Myinternaiclass — является внутренним, то он не виден: этот класс недоступен внешним проектам. Напротив, класс MyExternalciaaa доступен, и мы используем его в консольном приложении.

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

static void Main(stringM arga)

MylntemalClaBS qyObj ». new MylntemalClaea();

Console.WriteLine {nyObj .ToStringO ) j

>

При попытке откомпилировать такой код будет получено следующее сообщение об ошибке:

C:\BegCSharp\ChapterS\Ch09Ex02\Class1 .cs(13): 'Ch09ClassLib.MylnternalClass'

(C:\BegCSharp\Chapter9\Ch09Ex02\Classl.cs( 13): класс ‘Ch09ClassLib.MyInternalC]ass’ is inaccessible due to its protection level недоступен из-за уровня его защиты)

Этот способ использования классов из внешних модулей является ключевым при программировании на C# в .NET Framework. Фактически так мы поступаем со всеми классами в .NET Framework, поскольку работа с ними организована аналогичным образом.

Сравнение интерфейсов и абстрактных классов

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

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

Глава 9

Рм»*пв*гТг*1п

Теперь о различиях.

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

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

Это указывает на то, что эти два тнпа предназначаются для совершенно различных целен. Абстрактные классы используются в качестве базовых классов семейств тех объектов, которые обладают общими основными характеристиками, такими как цели, для которых они предназначены, и структура. Интерфейсы используются классами; отличия между которыми могут лежать на гораздо более фундаментальном уровне, но которым при этом может требоваться выполнение некоторых одинаковых действий.

В качестве примера представьте себе семейство объектов, представляющих поезда (см. рис. слева). Базовый класс — Train (поезд) — содержит основное определение поезда, куда включается, например, размер колес и тип двигателя (который может быть паровым, дизельным н т.д.). Этот класс, однако, является абстрактным, поскольку в природе не существует такой вещи, как “обобщенный" поезд. Для создания “конкретного" поезда нужно задать характеристики, присущие данному поезду. Это, в свою очередь, требует создания производных классов Вроде PassengerTrain (Пассажирский Поезд), FreightTrain (грузовой поезд) и 424DoubieBogey (424 колесные пары).

Аналогичным образом может быть определено семейство автомобилей: с помощью базового класса Саг (автомобиль) И производных ОТ него классов Compact (компакт), suv и pickup (пикап), саг и Train могут даже быть производными от одного общего базового класса (vehicle — средство передвижения), как показано на следующем ниже рисунке.
Предыдущая << 1 .. 91 92 93 94 95 96 < 97 > 98 99 100 101 102 103 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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