Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


ИНТЕРФЕЙСЫ И МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ


Download 2.46 Mb.
bet46/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   42   43   44   45   46   47   48   49   ...   91
Bog'liq
Язык программирования C#

10. ИНТЕРФЕЙСЫ И МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ
В отличие от таких языков как C++ язык C# не поддерживает множественное наследование, то есть создание класса потомка, производного от нескольких предков. С одной стороны множественное наследование является очень мощным механизмом проектирования, но с другой оно приводит к трудно устраняемым ошибкам программирования.
Отчасти обойти ограничения языка C# на множественное наследование позволяет использование интерфейсов. Интерфейс – это набор сигнатур методов, свойств и индексаторов без реализации. Классы или структуры, наследующие от интерфейса, должны предоставить реализацию задекларированных в интерфейсе методов свойств и индексаторов. Таким образом, интерфейс предоставляет набор действий, которые должен уметь выполнять наследующий от него класс или иными словами интерфейс представляет собой некий контракт, на выполнение которого подписывается класс, наследую от него. Интерфейс является аналогом абстрактного класса, не содержащего никаких полей, основное различие между интерфейсом и абстрактным классом заключается в том, что последний может иметь поля.
В языке C# класс или структура могут наследовать только от одного класса, но при этом реализовать несколько интерфейсов.


10.1. Определение интерфейса

Для определения интерфейса используется ключевое слово interface. Все члены интерфейса являются абстрактными abstract и открытыми public, при этом не разрешается явное использование каких-либо спецификаторов доступа.


Как классы и структуры интерфейс может иметь спецификатор доступа public, private или internal, определяющие его видимость в других пространствах имен. Общий формат для определения интерфейсов показан на следующей схеме.


interface имя_интерфейса
{
// объявление методов
}

Как видите, форма определения интерфейсов полностью совпадает с определением классов. Приведем теперь пример определения интерфейса.


interface IPhone


{
void Dial(int Number);
void Receive ();
void Accept();
void Reject();
}
Лист. 1.1

Приведенный интерфейс содержит сигнатуры четырех методов, определяющих работу телефонного аппарата: Dial – набрать номер и Receivel – получить вызов, Accept – принять вызов и Reject – не принять вызов или разорвать соединение. Этот интерфейс содержит функции, которые должен реализовать любой аппарат, работающий в телефонной сети, этот может быть обычный телефон, факс модем и т.д.


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


Для того чтобы добавить в интерфейс свойство, нужно помимо его имени и типа в фигурных скобках указать доступно ли это свойство только для чтения get, только для записи set или для чтения и записи одновременно get и set.
Для объявления индексатора, нужно написать его тип ключевое слово this и в квадратных скобках указать тип имя параметра для доступа к нему. Аналогично объявлению свойств после квадратных скобок в скобках фигурных нужно указать способ доступа к индексатору. Индексаторы, предназначенные только для чтения или только для записи, содержат только get или set метод, соответственно, а предназначенные и для чтения и для записи – оба.

Интерфейс может наследовать объявления от других интерфейсов, при этом допускается множественное наследование одному интерфейсу от нескольких. Общий формат для определения интерфейсов, наследующих от нескольких других, показан на данной схеме.





Download 2.46 Mb.

Do'stlaringiz bilan baham:
1   ...   42   43   44   45   46   47   48   49   ...   91




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling