Примечание. Методом исключения можно догадаться, что интерфейс не может содержать кон­станты, поля, операции, конструкторы

Методом исключения можно догадаться, что интерфейс не может содержать кон­станты, поля, операции, конструкторы, деструкторы, типы и любые статические элементы.

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

interface IAction

{

void Draw();

int Attack(int a);

void Die();

int Power {get; } }

В интерфейсе IAction заданы заголовки трех методов и шаблон свойства Power, доступного только для чтения. Как легко догадаться, если бы требовалось обес­печить еще и возможность установки свойства, в шаблоне следовало указать ключевое слово set, например:

int Power { get: set; }

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

ВНИМАНИЕ

Если некий набор действий имеет смысл только для какой-то конкретной иерархии классов, реализующих эти действия разными способами, уместнее задать этот набор в виде виртуальных методов абстрактного базового класса иерархии. То, что работа­ет в пределах иерархии одинаково, предпочтительно полностью определить в базо­вом классе (примерами таких действий являются свойства Health, Ammo и Name из иерархии персонажей игры). Интерфейсы же чаще используются для задания общих свойств объектов различных иерархий.

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

- элементы интерфейса по умолчанию имеют спецификатор доступа public и не могут иметь спецификаторов, заданных явным образом;

- интерфейс не может содержать полей и обычных методов — все элементы ин­терфейса должны быть абстрактными;

□ класс, в списке предков которого задается интерфейс, должен определять все
его элементы, в то время как потомок абстрактного класса может не переоп­
ределять часть абстрактных методов предка (в этом случае производный
класс также будет абстрактным);

□ класс может иметь в списке предков несколько интерфейсов, при этом он
должен определять все их методы.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: