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

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 100 101 102 103 104 105 < 106 > 107 108 109 110 111 112 .. 404 >> Следующая


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

Реализация интерфейсов в классах

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

public Interface iHylnterface (

void DoSomething<I; void DoSomethingElse ();

>

public class MyCiass : IMylnterface (

public void IMyInterface.DoSomething()

(

>

public void DoSomethingElse() t ¦

}

)

Интерфейсы также могут реализовываться на базовых классах, напрнмер:

public interface IMylnterface (

void DoSomething О г void DoSomethingElse();

>
Определение членов классов

219

public class MyBaseClafis

{

public void DoSomething()

{

}

)

public claes MyDeriv Class : MyBaseClass, IMylnterface {

public void DoSoraethingElse()

{

)

Наследование из базового класса, который реализует данный интерфейс, означает, что этот интерфейс опосредованно поддерживается и производным классом:

public interface IMylnterface {

void DoSomething() ; void DoSomethingElse();

>

public class MyBaseClass : IMylnterface (

public virtual void DoSomething ()

<

J

public virtual void DoSomethingElse () t

>

}

public cla lyDerivedClase : MyBaseClass t

public override void DoSomething I)

)

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

Явная реализация членов интерфейса

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

Например, если в классе MyClass метод DoSomething () интерфейса IMylnterface реализован неявным образом, следующий код является допустимым:

HyClass BtyCbj = new MyClass О ; myObj.DoSomething(};
220 Глава 10

Как н такой:

ЦуС1ааа myObj » new KyClaaa()} .

IMylnterface myint = nyObj ,¦

myint.DoSomething()j

Напротив, в том случае, если в классе MyDerivedciass метод DoSomething () реализован явным образом, то разрешается использовать только второй способ. Для этого потребуется запнсать следующий код

public claaa MyCiass : IMylnterface

(

void IMylnterface.DoSomething()

С

>

public void DoSomethingElse О {

)

}

Здесь DoSomething () реализован явным образом, a DoSomethingElse () — неявным. Непосредственный доступ через экземпляр объекта класса Myclass допускается только ко второму нз ннх.

Пример приложения

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

? Класс card (карта) представляет собой стандартную игральную карту какой-либо масти — треф, бубен, червей или пик — и определенного старшинства в диапазоне между тузом н королем.

? Класс Deck (колода) представляет собой полную колоду из 52 карт, обеспечивает возможность получать карту по ее местоположению в колоде н позволяет перетасовывать карты.

Мы также разработаем простое клиентское приложение, чтобы убедиться, что все это работает, но использовать колоду в полноценном приложении для карточных игр мы не будем — пока не будем!

Планирование приложения

Наши классы будут содержаться в библиотеке классов этого приложения — chiocardLib. Прел<де чем приступать к написанию какого бы то нн было кода, нам необходимо спланировать необходимую структуру и функциональные возможности наших классов.

Класс Card

Класс card в основном будет служить контейнером для двух полей, использующихся в режиме “только чтение”: suit (масть) и гапч (старшинство). Причина, по которой мы собираемся создавать поля, используемые в режиме “только чтение”, заключается в том, что нет смысла использовать "пустую” карту и не должно
Определение членов классов

221

существовать возможности изменять карты после того, как они созданы. Для достижения этой цели мы опишем конструктор по умолчанию как частный и введем альтернативный конструктор, который будет создавать карту по заданным масти и старшинству.
Предыдущая << 1 .. 100 101 102 103 104 105 < 106 > 107 108 109 110 111 112 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

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

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

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

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