¿Puede explicarme qué where T : class, new()
significa en la siguiente línea de código?
void Add<T>(T item) where T : class, new();
c#
generics
type-constraints
Rawhi
fuente
fuente
Respuestas:
Esa es una restricción en el parámetro genérico
T
. Debe ser unclass
(tipo de referencia) y debe tener un constructor público predeterminado sin parámetros.Eso significa que
T
no pueden ser unaint
,float
,double
,DateTime
o cualquier otrostruct
(tipo de valor).Podría ser un
string
, o cualquier otro tipo de referencia personalizado, siempre que tenga un constructor predeterminado o sin parámetros.fuente
new()
especifica con precisión "debe tener un constructor público sin parámetros"Esas son restricciones de tipo genérico. En su caso hay dos de ellos:
Significa que el tipo
T
debe ser un tipo de referencia (no un tipo de valor).Significa que el tipo
T
debe tener un constructor sin parámetros. Tener esta restricción le permitirá hacer algo comoT field = new T();
en su código que de otra manera no podría hacer.Luego combina los dos usando una coma para obtener:
fuente
donde T: struct
El argumento de tipo debe ser un tipo de valor. Se puede especificar cualquier tipo de valor, excepto Nullable. Consulte Uso de tipos anulables (Guía de programación de C #) para obtener más información.
donde T: clase
El argumento de tipo debe ser un tipo de referencia, que incluye cualquier clase, interfaz, delegado o tipo de matriz. (Vea la nota abajo.)
donde T: new () El argumento type debe tener un constructor público sin parámetros. Cuando se usa junto con otras restricciones, la restricción new () debe especificarse en último lugar.
donde T: [nombre de la clase base]
El argumento de tipo debe ser o derivar de la clase base especificada.
donde T: [nombre de la interfaz]
El argumento de tipo debe ser o implementar la interfaz especificada. Se pueden especificar múltiples restricciones de interfaz. La interfaz de restricción también puede ser genérica.
donde T: U
El argumento de tipo proporcionado para T debe ser o derivar del argumento proporcionado para U. Esto se denomina restricción de tipo simple.
fuente
class
&new
son 2 restricciones en el parámetro de tipo genéricoT
.Respectivamente aseguran:
class
new
Su combinación significa que el tipo
T
debe ser un Tipo de referencia (no puede ser un Tipo de valor ) y debe tener un constructor sin parámetros.Ejemplo:
fuente
new (): especificar la restricción new () significa que el tipo T debe usar un constructor sin parámetros, por lo que se puede crear una instancia de un objeto a partir de él; consulte Constructores predeterminados .
clase: significa que T debe ser un tipo de referencia, por lo que no puede ser int, float, double, DateTime u otra estructura (tipo de valor).
fuente
Eso significa que el tipo
T
debe ser una clase y tener un constructor que no tome ningún argumento.Por ejemplo, debe poder hacer esto:
fuente
donde (referencia de C #)
Por lo tanto, debe ser,
T
debe ser una clase y tener un constructor accesible sin parámetros o predeterminado.fuente
Lo que viene después del "Dónde" es una restricción sobre el tipo genérico T que declaró, así que:
clase significa que la T debe ser una clase y no un tipo de valor o una estructura.
new () indica que la clase T debe tener un constructor público predeterminado sin parámetros definido.
fuente
Se llama 'restricción' en el parámetro genérico T. Significa que T debe ser un tipo de referencia (una clase) y que debe tener un constructor público predeterminado.
fuente
Esto es parte del mecanismo genérico, donde la palabra clave where agrega restricciones a los tipos que deben implementarse para ser utilizados como parámetros de tipo.
fuente
cuando se usa la clase en restricciones, significa que solo se puede usar el tipo de Referencia, otra cosa que se debe agregar es cuándo usar la restricción new () , debe ser lo último que escriba en los términos de Restricciones.
fuente