En C #, ¿qué where T : class
significa?
Es decir.
public IList<T> DoThis<T>() where T : class
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í.
significa que el tipo utilizado como T
cuando se usa el método genérico debe ser una clase, es decir, no puede ser una estructura o un número incorporado como int
odouble
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
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 #)
T representa un tipo de objeto de, implica que puede dar cualquier tipo de. IList: si IList s = new IList; Ahora s.add ("Siempre aceptar cadena").
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