Class имя_класса : имя_интерфейса


{

// тело класса

}

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

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

Класс может наследовать базовый класс и реализовать один или несколько интерфейсов. В этом случае список интерфейсов должен возглавлять имя базового класса.

Рассмотрим пример реализации интерфейса ISeries, объявление которого было приведено выше. Здесь создается класс с именем 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.

using System;

Class SeriesDemo

{

Public static void Main()

{

ByTwos ob = new ByTwos();

If (ob is ISeries)

Console.WriteLine("Объект реализует интерфейс ISeries");

else throw new Exception ("Объект НЕ реализует ISeries");

for (int i = 0; i < 5; i++)

Console.WriteLine("Следующее значение = " + ob.getNext());

Console.WriteLine("\nПереход в исходное состояние.");

ob.reset();

for (int i = 0; i < 5; i++)

Console.WriteLine("Следующее значение = " + ob.getNext());

Console.WriteLine("\nНачинаем с числа 100.");

ob.setStart(100);

for (int i = 0; i < 5; i++)

Console.WriteLine("Следующее значение = " + ob.getNext());

}

}

}

Рассмотрим пример другой реализации интерфейса. Класс Primes генерирует ряд простых чисел. Обратите внимание на то, что его способ реализации интерфейса ISeries в корне отличается от используемого классом ByTwos.

Class Primes : ISeries

{

int start;

int val;

Public Primes()

{

start = 2;

val = 2;

}

Public int getNext()

{

int i, j;

bool isprime;

val++;

for (i = val; i < 1000000; i++)

{

isprime = true;

for (j = 2; j < (i / j + 1); j++)

{

if ((i % j) == 0)

{

isprime = false;

break;

}

}

If (isprime)

{

val = i;

break;

}

}

return val;

}

Public void reset()

{

val = start;

}

Public void setStart(int x)

{

start = x;

val = start;

}

}

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

Использование интерфейсных ссылок

Ссылочная переменная интерфейсного типа может ссылаться на любой объект, который реализует ее интерфейс.

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

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



Дата добавления: 2019-02-08; просмотров: 778;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.