Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / Конспект лекций (C#).pdf
Скачиваний:
864
Добавлен:
27.05.2015
Размер:
2.03 Mб
Скачать

7.2.4 Ограничения ссылочного типа и типа значения

Данные ограничения требуют, чтобы «аргумент типа» принадлежал заданной группе типов.

Наложение ограничения ссылочного типа «class»:

позволяет внутри класса работать с параметром типа, как с переменной, допускающей значение null, например:

class MyClass<T> where T : class

{

T A;

public MyClass()

{

//Без ограничения «class» в строке заголовка класса

//нижеприведенная строка будет выдавать ошибку при компиляции

A = null;

}

}

блокирует использование в качестве аргумента типа типов значения, например:

MyClass<int> i = new MyClass<int>();

//

Ошибка компиляции

MyClass<string> s = new MyClass<string>(); //

А эта строка допустима

Наложение ограничения типа значения «struct» приводит прямо к противоположным результатам, например:

class MyClass<T> where T : struct

{

T A;

public MyClass(T NewA)

{

A = null; // Теперь эта строка вызывает ошибку компиляции A = NewA; // А эта строка вполне допустима

}

}

 

 

MyClass<int> i = new MyClass<int>(10);

//

Эта строка допустима

MyClass<string> s = new MyClass<string>(10);

//

Ошибка компиляции

7.2.5 Установление связи между двумя

параметрами с помощью

ограничения

 

 

Ещё одной особенностью ограничений является возможность требования наличия связи «родитель-потомок» между параметрами типа. Например, если требуется, чтобы параметр типа V был таким же, или являлся наследником параметра типа T, то запись такого ограничения будет иметь вид:

class MyClass<T, V> where V : T { ... }

106