Реализация интерфейсов
Формат записи класса, который реализует интерфейс:
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.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.