C# можно ли установить закрытие параметров класса (generics) определённым типом?


#1

Можно ли установить закрытие параметров класса (generics) определённым типом? Например классом или структурой.


#2

можно. нужно писать так:
class MyClass where T : struct // можно закрывать только структурными типами
{/.../}

class MyClass where T : class // можно закрывать только классами
{/.../}

class MyClass where T : new() // можно закрывать только типами имеющие конструкторы по умолчанию (исключение: абстрактными классами закрывать нельзя)
{/.../}

class MyClass where T : Base // можно закрывать только классами потомками от Base или самим Base
{/.../}

class MyClass where T : IInterface // можно закрывать только типами реализующими интерфейс IInterface
{/.../}

class MyClass<T, U> where T : U // тип T должен быть производным от типа U или быть типом U
{/.../}

Можно устанавливать несколько ограничений для одного типа, например:
class MyClass where T : class. new() // можно закрывать только классами имеющими конструктор по умолчанию;

Примечание: при указании нескольких ограничений (в том числе new()), ограничение new() - должен быть написан последним
{/.../}