ВУЗ:
Составители:
Рубрика:
124
// примеры возможных уточнений
class SomeGeneric<T1, T2, T3>
where T1: IComparable
where T2: SomeGenericClass<T1, T2>, IComparable, new()
where T3: SomeClass, IEnumerable, IComparable
{
. . .
}
В качестве уточнения может использоваться имя класса (при этом
параметр типа должен быть унаследован от этого класса), имя интерфейса
(который должен реализовать параметр типа) или new(). Класс и
интерфейсы могут быть и обобщениями.
Имя класса в уточнении может быть задано только один раз и обязано
быть первым в списке уточнений. Интерфейсы могут задаваться в любом
количестве. Ограничение new() говорит о том, что параметр типа должен
реализовывать public-конструктор, не имеющий параметров, что означает
возможность создания экземпляра соответствующего типа с помощью
оператора new. Ограничение new() должно быть последним в списке
уточнений.
В .NET можно описывать не только обобщенные классы, но и
обобщенные интерфейсы (generic-интерфейсы), обобщенные делегаты
(generic-делегаты), отдельные методы классов (generic-методы).
Обобщенные классы могут быть унаследованы от других классов, в
том числе и от обобщенных. Также они могут реализовывать любое
количество интерфейсов, как обычных, так и generic. Простые классы и
интерфейсы также могут быть унаследованы от generic-классов, но при
этом generic-классы и интерфейсы должны быть закрытыми типами.
Обобщенные классы и интерфейсы не могут быть унаследованы от типов-
параметров.
Приведем несколько примеров:
// Нельзя использовать параметр типа
// в качестве базового типа!
class Extend<V> : V {} // Ошибка!
// Пусть определены обобщенный класс C
// и обобщенный интерфейс I1
class C<U, V> {}
interface I1<V> {}
// примеры возможных уточнений
class SomeGeneric
where T1: IComparable
where T2: SomeGenericClass, IComparable, new()
where T3: SomeClass, IEnumerable, IComparable
{
. . .
}
В качестве уточнения может использоваться имя класса (при этом
параметр типа должен быть унаследован от этого класса), имя интерфейса
(который должен реализовать параметр типа) или new(). Класс и
интерфейсы могут быть и обобщениями.
Имя класса в уточнении может быть задано только один раз и обязано
быть первым в списке уточнений. Интерфейсы могут задаваться в любом
количестве. Ограничение new() говорит о том, что параметр типа должен
реализовывать public-конструктор, не имеющий параметров, что означает
возможность создания экземпляра соответствующего типа с помощью
оператора new. Ограничение new() должно быть последним в списке
уточнений.
В .NET можно описывать не только обобщенные классы, но и
обобщенные интерфейсы (generic-интерфейсы), обобщенные делегаты
(generic-делегаты), отдельные методы классов (generic-методы).
Обобщенные классы могут быть унаследованы от других классов, в
том числе и от обобщенных. Также они могут реализовывать любое
количество интерфейсов, как обычных, так и generic. Простые классы и
интерфейсы также могут быть унаследованы от generic-классов, но при
этом generic-классы и интерфейсы должны быть закрытыми типами.
Обобщенные классы и интерфейсы не могут быть унаследованы от типов-
параметров.
Приведем несколько примеров:
// Нельзя использовать параметр типа
// в качестве базового типа!
class Extend : V {} // Ошибка!
// Пусть определены обобщенный класс C
// и обобщенный интерфейс I1
class C {}
interface I1 {}
124
Страницы
- « первая
- ‹ предыдущая
- …
- 122
- 123
- 124
- 125
- 126
- …
- следующая ›
- последняя »
