Интерфейсные свойства
Формат объявления:
Тип имя
{
get;
set;
}
Свойства, предназначенные только для чтения или только для записи, содержат только get- или set-элемент, соответственно.
Интерфейсные индексаторы
Формат объявления:
тип_элементa this [int индекс]
{
get;
set;
}
Индексаторы, предназначенные только для чтения или только для записи, содержат только get- или set- элемент, соответственно.
Наследование интерфейсами интерфейсов
Один интерфейс может унаследовать "богатство" другого. Синтаксис этого механизма аналогичен синтаксису, используемому для наследования классов.
Если класс реализует интерфейс, который наследует другой интерфейс, этот класс должен обеспечить способы реализации для всех членов, определенных внутри цепочки наследования интерфейсов.
Пример:
public interface IA { . . . }
public interface IВ : IA { . . . }
class MyClass : IВ { . . . } // Класс должен реализовать члены IA и IB
В производном интерфейсе можно объявить член, который скрывает член, определенный в базовом интерфейсе (член д.б. помечен как new).
Явная реализация членов интерфейса
При реализации члена интерфейса можно квалифицировать его имя с использованием имени интерфейса (явная реализация).
В этом случае такой член будет недоступен вне класса.
Interface IA
{
int Method (int x);
}
// Явная реализация интерфейсного метода
Class Class : IA
{
Int IA.Method(int x)
{
return x / 3;
}
}
Причина: класс может реализовать два интерфейса, которые объявляют методы с одинаковыми именами и типами. Полная квалификация имен позволяет избежать неопределенности.
Для чего нужны интерфейсы
Интерфейс не несет в себе никакой функциональности, а объявленные в интерфейсе методы можно реализовать в классе и без существования интерфейса. Почему же он бывает необходим?
Интерфейс может быть базовым классом для нескольких производных для реализации динамического связывания (вызова перегруженных методов).
Если Вы решили реализовать класс с интерфейсом, который будет использовать какая-либо программа (клиент), то компилятор не позволит Вам сделать ошибку в количестве методов, которые необходимо реализовать, сигнатуре каждого метода интерфейса и возвращаемом им значении.
Программа, использующая класс, в котором должен быть реализован интерфейс, может удостовериться в этом, прежде чем вызывать его интерфейсные методы, с помощью рефлексии или операторов as или is:
if (!(ob is IA))
throw new Exception ("Объект НЕ реализует интерфейс IA");
Ряд средств языка во время выполнения программы так же осуществляют проверку наличия интерфейса.
Дата добавления: 2019-02-08; просмотров: 659;