Обобщения (классы, методы). Интерфейсы. Примеры применения
Вопросы из предыдущей лекции
Синтаксис оформления ограничения
Синтаксис оформления ограничения
Синтаксис оформления ограничения
Синтаксис оформления ограничения
Синтаксис оформления ограничения
Примеры использования ограничений
Oграничение конструктором без параметров
Порядок ограничений
Порядок ограничений. Пример.
Порядок ограничений
Разные формальные параметры
Пример. Разные формальные параметры.
Пример. Одинаковый формальный параметр.
Разрастание кода
449.15K
Категория: ПрограммированиеПрограммирование

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

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

Лекция 4

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

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

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

Ограничение интерфейсом
class Task<T> where T : Имя_Интерфейса{
….
}
Фактическим типом для параметра T может быть класс,
который поддерживает данный интрефейс

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

Ограничение классом и его наследниками
(если такие есть )
class Task<T> where T : Имя_Класса{
….
}
Фактическим типом для параметра T может быть класс
или его наследники

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

Oграничение ссылочным типом
class Task<T> where T : class{
….
}
Фактическим типом для параметра T может быть только класс.
Task<double> D = new Task<double>(..);//error
Task<string> D = new Task<string>(..);

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

Oграничение значимым типом
class Task<T> where T : struct{
….
}
Фактическим типом для параметра T может быть только структура.
Task<double> D = new Task<double>(..);
Task<string> D = new Task<string>(..); //error

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

Oграничение конструктором без параметров
class Task<T> where T : new(){
….
}
C помощью слова new задаётся ограничение для типа T,
это может быть класс или структура, которые имеют
общедоступный конструктор без параметров.

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

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

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<T> 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<N; i++)
array[i] = new T();
}
public T this[int i]{
set {array[i] = value;}
get {return array[i];}
}
public void print(){
Oграничение
конструктором
без параметров
public static void Main(string[] args)
{
Array<Point> Arr = new Array<Point>(3);
Arr[1] = new Point(4,-2);
Arr.print();
}
for (int i=0; i<N; i++)
Console.WriteLine(array[i].ToString()); } }

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

Если для универсального параметра задано
несколько ограничений, то они должны идти
в определенном порядке:
1. Название класса, class, struct. Можно
одновременно определить только одно из
этих ограничений
2. Название интерфейса
3. 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<T> where T: Person, IPrint, new(){
public T autor;
public Task(){
autor = new T();
autor.move();
autor.Name …

}…}

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

Если класс использует несколько универсальных
параметров, то последовательно можно задать
ограничения к каждому из них.
class Task<U, V> where U : Person
where V : class, new()
{
}

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

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

}
public class Food<T>{
public void new_method(T Value){
….}

}

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

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

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

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