Обобщения (классы, методы). Интерфейсы. Примеры применения презентация

Содержание

Слайд 2

Вопросы из предыдущей лекции

Интерфейс. Что можно объявит (реализовать) в интерфейсе.
Ограниечения для обобщенного класса:
Ограничение

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

Слайд 3

Синтаксис оформления ограничения

class Task where T : Имя_Интерфейса{
….
}

Ограничение интерфейсом

Фактическим типом для параметра

T может быть класс, который поддерживает данный интрефейс

Слайд 4

Синтаксис оформления ограничения

class Task where T : Имя_Класса{
….
}

Ограничение классом и его наследниками

(если такие есть )

Фактическим типом для параметра T может быть класс или его наследники

Слайд 5

Синтаксис оформления ограничения

class Task where T : class{
….
}

Фактическим типом для параметра T

может быть только класс.

Task D = new Task(..);//error
Task D = new Task(..);

Oграничение ссылочным типом

Слайд 6

Синтаксис оформления ограничения

class Task where T : struct{
….
}

Фактическим типом для параметра T

может быть только структура.

Task D = new Task(..); Task D = new Task(..); //error

Oграничение значимым типом

Слайд 7

Синтаксис оформления ограничения

Oграничение конструктором без параметров

class Task where T : new(){
….
}

C помощью

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

Слайд 8

Примеры использования ограничений

Слайд 9

class Point{         int x,y;         public Point(){x=y=0;}         public Point(int x, int y){this.x =x; this.y = y;}         public override string ToString() {        return string.Format("[Point X={0}, Y={1}]", x, y);         }     }     

 class Array where T : new(){         T[] array;         public int N{set; get;}         public Array(int n){             N = n;             array = new T[N];             for (int i=0; i

public static void Main(string[] args)         {             Array Arr = new Array(3);             Arr[1] = new Point(4,-2);             Arr.print();
}

Oграничение конструктором

без параметров

Слайд 10

Порядок ограничений

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

определенном порядке:
Название класса, class, struct. Можно одновременно определить только одно из этих ограничений
Название интерфейса
new()

Слайд 11

Порядок ограничений. Пример.

interface IPrint{
   void print();
void move();
}
class Person: IPrint{
    public string Name { get;

set; }
public void print(){…}
public void move(){…}
public Person(){…}
}
 class Task where T: Person, IPrint, new(){
public T autor;
public Task(){
autor = new T();
autor.move();
autor.Name …

}…}

Слайд 12

Порядок ограничений

class Task where U : Person
         where V : class, new()

}

Если класс

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

Слайд 13

Разные формальные параметры

public class Food{
public void new_method(T2 Value){
….}

}

public class Food{
public void new_method(T

Value){
….}

}

Слайд 14

Пример. Разные формальные параметры.

Слайд 15

Пример. Одинаковый формальный параметр.

Слайд 16

Разрастание кода

Конкретизация (reification) – создание класса путем задания в обобщенном классе конкретных типов

вместо неопределенных типов-параметров.
Имя файла: Обобщения-(классы,-методы).-Интерфейсы.-Примеры-применения.pptx
Количество просмотров: 65
Количество скачиваний: 0