Интерфейсы

Интерфейсом называется «крайний» случай абстрактного класса, в нём задаётся набор абстрактных методов, свойств, индексаторов, которые должны быть реализованы или переопределены в классах – наследниках. Содержат только абстрактные и пустые методы.

Синтаксис:

[спец.] interface имя_класса[:предки]

{

 

//абстрактные методы;

}

Спецификаторы:

new

public

protected

internal

private

По умолчанию интерфейс доступен только из той сборки, в которой описан (internal).

Интерфейс поддерживает множественное наследование. Предки перечисляются через запятую после двоеточия.

Отличие интерфейса от абстрактного класса:

1. Элементы интерфейса по умолчанию public. Не имеют спецификаторов, заданных явно.

2. Интерфейс не содержит обычных полей и методов. Класс, в списке предков которого задаётся интерфейс, должен обязательно переопределить все его элементы.

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

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

interface IAction

{

 

void Print();

int Age(int a);

}

 

class Person : IAction

{

public void Print()

{

C.W. (“Здесь был “ + name);

}

 

public int Age (int age)

{

if age > 0, C.W. (“Age = “ + age);

else age = 18;

return age;

}

}

//главный метод.

Person Вася = new (“Вася = “ , 18);

Вася.Print();

IAction Actor = new Person (“Петя”, 19)

Actor.Print();

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

 

 

Контрольные вопросы по теме «Интерфейсы»:

 

1. Что называется интерфейсом?

2. Синтаксис объявления интерфейса.

3. Какие спецификаторы могут быть указаны для интерфейса?

4. Какой спецификатор имеет интерфейс по умолчанию?

5. Поддерживает ли интерфейс множественное наследование?

6. Содержит ли интерфейс поля, константы, конструкторы, деструкторы, статические элементы?

7. Какой спецификатор доступа имеют элементы интерфейса по умолчанию?

8. Задаются ли спецификаторы элементов интерфейса явным образом?

9. Может ли интерфейс кроме абстрактных содержать и обычные методы?

10. Все ли абстрактные методы интерфейса должны переопределяться в классе потомке?

11. С какими спецификаторами доступа должны быть переопределены элементы интерфейса в производном классе?

12. Какими способами можно обратиться к элементам интерфейса, переопределённым в производном классе?

13. Если при реализации интерфейса в классе было явно указано имя интерфейса перед реализуемым элементом, нужно ли указывать спецификатор доступа, если нужно, то какой?

14. В каком случае к переопределённым элементам интерфейса можно обратиться только через объект типа интерфейса?

15. Класс наследник двух интерфейсов содержит метод с одним именем и одной и той же сигнатурой?

16. Как обратиться к этим методам различных интерфейсов?

17. Назначение операции is.

18. Как используется операция is?

19. Недостаток операции is?

20. Назначение операции as.

21. Какой метод стандартного интерфейса позволяет сравнивать объекты по принципу < или >, что позволяет выполнять их сортировку?

22. Какой метод стандартного интерфейса позволяет выполнять сортировку по разным критериям?