Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Концепции ООП.docx
Скачиваний:
16
Добавлен:
29.03.2016
Размер:
157.73 Кб
Скачать

8. Интерфейсы, применение предназначения.

ИНТЕРФЕЙСЫ, применение и предназначение

Основное понятие:

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

Синтаксис интерфейса:

interface имя_интерфейса

{

Список абстрактных методов

}

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

Класс может иметь только одного предка, но реализовывать сколько угодно интерфейсов

• Пример

class Rectangle : Figure, IFigure

{

\\\\\\

}

Для интерфейса могут использоваться спецификаторы new, public, internal и private.

Спецификатор new применяется для вложенных интерфейсов.

По умолчанию интерфейс доступен только из

сборки, в которой он описан, по умолчанию используется спецификатор internal.

Все функциональные члены интерфейса по определению являются открытыми (public) и

абстрактными (abstract), поэтому при описании метода указывается только тип возвращаемого им значения и сигнатура.

Ограничения при использовании интерфейсов

1.Интерфейс не реализует методы.

2.Интерфейс не может определять поля, конструкторы, деструкторы или операторные методы.

3.Ни один член интерфейса не может быть объявлен статическим.

4.Методы неявно являются открытыми (public- методами), не разрешается явным образом указывать спецификатор доступа.

Пример интерфейса

interface IDraw

{

void Draw();

}

interface IFigure

{

void Move(double dx, double dy);

void Resize(double scalex, double scaley);

double X { set; get; } double Y { set; get; }

}

9. Generic типы.

Generic типы

Generic типы (обобщения) используются в ситуациях, когда поведение алгоритма не зависит от типа данных, с которым осуществляется работа. Generic нужны для облегчения работы. Например обычный метод с int обрабатывает только целочисленные массивы, а с Generic работает с любым типом массивов.

static void WriteArr(int[] arr)

{

foreach (var item in arr)

Console.WriteLine(item);

}

Обобщённые методы

void WriteArr<T> ( T[] arr ) {}

Обобщённые типы (классы и структуры)

Class MyList<T>

Struct Pair<Tkey, TValue>

Обобщённые интерфейсы

Interface IDrawable<T>

Обобщённые делегаты

delegate void DoSomething<T> (T x, T y)

Пример Generic

static void Print<T> (T[] arr)

{

foreach (var item in arr)

{

Console.Write(item);

}

}

static void Main(string[] args)

{

int[] = {....};

string[]s = {"....", "...",...};

Print <int>(i);

Print(S);

}

10. Ограничения Generic типов.

Ограничения Generic типов

Действия выполнимы только если компилятор о них знает:

T Max<T>( T, x, T, y)

{

return x>y ? x: y;

}

Правильная реализация:

T Max<T>( T, x, T, y) where T : IComparable<T>

{

return x.CompareTo(y) > 0 ? x:y;

}

Синтаксис:

where шаблон: список_ограничений

where T: struct Структура (value-type)

where T: class Класс (reference-type)

where T: new() Тип должен иметь конструктор по умолчанию

where T: имя класса Соответствует указанному классу или его потомкам where T: имя интерфейса Реализует указанный интерфейс

where TChild: TBase TChild — класс, являющийся потомком класса TBase

Пример Generic

static void Print<T> (T[] arr)

{

foreach (var item in arr)

{

Console.Write(item);

}

}

static void Main(string[] args)

{

int[] = {....};

string[]s = {"....", "...",...};

Print <int>(i);

Print(S);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]