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 T
tiene 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 where
clá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 where
cláusula o las restricciones de parámetros genéricos .
where T : class, IComparable, new()
Eso se restringe T
a los tipos de referencia . No podrá poner tipos de valor ( struct
sy 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