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

Итак, если интерфейс определен, один или несколько классов могут его реализовать. Чтобы реализовать интерфейс, нужно указать его имя после имени класса подобно тому, как при создании производного указывается базовый класс. Формат записи класса, который реализует интерфейс, таков: class имя_класса : имя__интерфейса { // тело класса }

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

Классы могут реализовать несколько интерфейсов. В этом случае имена интерфейсов отделяются запятыми. Класс может наследовать базовый класс и реализовать один или несколько интерфейсов. В этом случае список интерфейсов должно возглавлять имя базового класса. Методы, которые реализуют интерфейс, должны быть объявлены открытыми. Дело в том, что методы внутри интерфейса неявно объявляются открытыми, поэтому их реализации также должны быть открытыми. Рассмотрим пример, где создается класс с именем ByTwos, генерирующий ряд чисел, в котором каждое следующее число больше предыдущего на два.

class ByTwos : ISeries

{int start; int val;

public ByTwos() { start = 0; val = 0;}

public int getNext() { val += 2; return val; }

public void reset() { val = start;}

public void setStart(int x) { start = x; val = start; }

Класс ByTwos реализует все три метода, определенные интерфейсом ISeries. Иначе и быть не может, поскольку классу не разрешается создавать частичную реализацию интерфейса. В классах, которые реализуют интерфейсы, можно определять дополнительные члены.

Как и методы, свойства определяются в интерфейсе без тела. Ниже приведен формат спецификации свойства.

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