Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





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

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

{

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

}

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

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

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

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

// реализовать интерфейс ISeries

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. Как пояснялось выше, это приходится делать потому, что в классе нельзя реализовать интерфейс частично.

using System;

public interface ISeries

{

int GetNext(); // возвратить следующее по порядку число

void Reset(); // перезапустить

void SetStart(int х); // задать начальное значение

}

// реализовать интерфейс ISeries

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, реализующего интерфейс

class SeriesDemo

{

static void Main()

{

ByTwos ob = new ByTwos();

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());

}

}

Для того чтобы скомпилировать код класса SeriesDemo, необходимо включить в компиляцию файлы, содержащие интерфейс ISeries, а также классы ByTwos и SeriesDemo. Компилятор автоматически скомпилирует все три файла и сформирует из них окончательный исполняемый файл. Так, если эти файлы называются ISeries. cs, ByTwos.cs и SeriesDemo.cs, то программа будет скомпилирована в следующей командной строке:

Date: 2015-09-02; view: 332; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию