En C# ¿qué significa where T : class
?En C#, ¿qué significa 'donde T: clase'?
Ie.
public IList<T> DoThis<T>() where T : class
En C# ¿qué significa where T : class
?En C#, ¿qué significa 'donde T: clase'?
Ie.
public IList<T> DoThis<T>() where T : class
En pocas palabras esto restringe la 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 esto MSDN article para más detalles.
'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
Es un generic type constraint. En este caso, significa que el tipo genérico T
tiene que ser un tipo de referencia (clase, interfaz, delegado o tipo de matriz).
que significa que el tipo utilizado como T
cuando se utiliza el método genérico debe ser una clase - es decir, no puede ser una estructura o construido en igual número int
o double
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
Es una restricción de tipo en T
, especificando que debe ser una clase.
La cláusula where
puede usarse 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, echa un vistazo a la página de MSDN en la where
clause o generic parameter constraints.
Es posible combinarlos juntos, por ejemplo: 'donde T: clase, IComparable, nuevo()' – Izzy
Que restringe T
a tipos de referencia. No podrá colocar tipos de valores (struct
sy tipos primitivos excepto string
) allí.
Se denomina restricción de parámetro de tipo. Efectivamente restringe qué tipo de 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.
T representa un tipo de objeto de, implica que se puede dar cualquier tipo de. IList: if IList s = new IList; Ahora s.add ("Aceptar siempre cadena").
where T: class
significa literalmente que T has to be a class
. Puede ser cualquier tipo de referencia. Ahora, cada vez que un código llame a su método DoThis<T>()
, debe proporcionar una clase para reemplazar T.Por ejemplo, si yo fuera a llamar a su método de DoThis<T>()
entonces voy a tener que llamar a él como siguiente:
DoThis<MyClass>();
Si su metthod es como el siguiente:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Entonces donde quiera T aparece en su método, será reemplazado por MyClass. Por lo que el último método que las llamadas del compilador, se verá como la siguiente:
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
}
-1: 'nuevo T()' no es posible con 'donde T: clase'. tienes que especificar 'donde T: new()' para poder hacerlo. – esskar
@explorer podemos definir un único método genérico y llamarlo desde múltiples lugares para insertar un registro pasando diferentes parámetros desde diferentes lugares. – User
Aquí T se refiere a un Class.It puede ser un tipo de referencia.
Has perdido un caso. El argumento de tipo para T también puede ser * cualquier otro parámetro de tipo que esté restringido para ser un tipo de referencia *. –
Upvoted para el enlace MSDN proporcionado. es muy útil – SaddamBinSyed