Respuestas:
En pocas palabras, esto está restringiendo el parámetro genérico a una clase (o más específicamente un tipo de referencia que podría ser una clase, interfaz, delegado o tipo de matriz).
Vea este artículo de MSDN para más detalles.
Es una restricción de tipo genérico . En este caso, significa que el tipo genérico Ttiene que ser un tipo de referencia (clase, interfaz, delegado o tipo de matriz).
Es una restricción de tipo T, que especifica que debe ser una clase.
La wherecláusula se puede usar para especificar otras restricciones de tipo, por ejemplo:
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 obtener más información, consulte la página de MSDN en la wherecláusula o las restricciones de parámetros genéricos .
where T : class, IComparable, new()
Eso se restringe Ta los tipos de referencia . No podrá poner tipos de valor ( structsy tipos primitivos excepto string) allí.
where T: class literalmente significa eso T has to be a class. Puede ser cualquier tipo de referencia. Ahora, siempre que el código llama a su DoThis<T>()método debe proporcionar una clase para reemplazar T . Por ejemplo, si tuviera que llamar a su DoThis<T>()método, tendré que llamarlo de la siguiente manera:
DoThis<MyClass>();
Si su método es como el siguiente:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Entonces, siempre que aparezca T en su método, será reemplazado por MyClass. Entonces, el método final que llama el compilador se verá así:
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()no es posible con where T : class. tienes que especificar where T: new()que se te permita hacerlo.
Se llama restricción de parámetro de tipo. Efectivamente limita qué tipo T puede ser.
El argumento tipo debe ser un tipo de referencia; Esto se aplica también a cualquier clase, interfaz, delegado o tipo de matriz.
Restricciones en los parámetros de tipo (Guía de programación de C #)
Aquí T se refiere a una clase. Puede ser un tipo de referencia.
'T' representa un tipo genérico. Significa que puede aceptar cualquier tipo de clase. El siguiente artículo podría ayudar:
http://www.15seconds.com/issue/031024.htm