Можно ли установить закрытие параметров класса (generics) определённым типом? Например классом или структурой.
можно. нужно писать так:
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() - должен быть написан последним
{/.../}