Respostas:
Simplificando, isso restringe o parâmetro genérico a uma classe (ou mais especificamente a um tipo de referência que pode ser um tipo de classe, interface, delegado ou matriz).
Consulte este artigo do MSDN para obter mais detalhes.
É uma restrição de tipo genérico . Nesse caso, significa que o tipo genérico T
deve ser um tipo de referência (classe, interface, delegado ou tipo de matriz).
É uma restrição de tipo T
, especificando que deve ser uma classe.
A where
cláusula pode ser usada para especificar outras restrições de tipo, por exemplo:
where T : struct // T must be a struct
where T : new() // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface
Para obter mais informações, consulte a página do MSDN na where
cláusula ou restrições genéricas de parâmetros .
where T : class, IComparable, new()
Isso restringe T
a tipos de referência . Você não poderá colocar tipos de valor (se struct
primitivos, exceto string
) lá.
where T: class
literalmente significa isso T has to be a class
. Pode ser qualquer tipo de referência. Agora sempre que algum código chama o DoThis<T>()
método que deve fornecer uma classe para substituir T . Por exemplo, se eu chamar seu DoThis<T>()
método, terei que chamá-lo da seguinte maneira:
DoThis<MyClass>();
Se o seu método for semelhante ao seguinte:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Então, sempre que T aparecer no seu método, ele será substituído pelo MyClass. Portanto, o método final que o compilador chama terá a seguinte aparência:
public IList<MyClass> DoThis<MyClass>()
{
MyClass variablename= new MyClass();
//other uses of MyClass as a type
// all occurences of T will similarly be replace by MyClass
}
new T()
não é possível com where T : class
. você precisa especificar where T: new()
para poder fazê-lo.
Isso é chamado de restrição de parâmetro de tipo. Efetivamente, restringe o tipo T.
O argumento type deve ser um tipo de referência; isso se aplica também a qualquer classe, interface, delegado ou tipo de matriz.
Restrições nos parâmetros de tipo (Guia de Programação em C #)
Aqui, T refere-se a uma classe e pode ser um tipo de referência.
'T' representa um tipo genérico. Isso significa que ele pode aceitar qualquer tipo de classe. O seguinte artigo pode ajudar:
http://www.15seconds.com/issue/031024.htm