Creo que hay gente que puede ser capaz de responder a esto, esta es una pregunta por curiosidad:Más curiosidades que realmente importante: ¿Por qué hay nuevo() restricción en Activator.CreateInstance <T>()?
El método genérico CreateInstance
de System.Activator
, introducido en .NET v2 no tiene restricciones de tipo genérico en el argumento, pero requiere un constructor predeterminado en el tipo activado; de lo contrario, se lanza un MissingMethodException
. Me parece obvio que este método debe tener una restricción de tipo como
Activator.CreateInstance<T>() where T : new() {
...
}
Sólo una omisión o alguna anécdota que acechan aquí?
actualización
Como se ha señalado, el compilador no le permiten escribir
private T Create<T>() where T : struct, new()
error CS0451: The 'new()' constraint cannot be used with the 'struct' constraint
Sin embargo, ver los comentarios una estructura se puede utilizar como argumento de tipo a un método genérico que especifica una nueva () restricción Bajo esta circunstancia, la respuesta dada parece la única razón válida para no restringir el método ...
¡Gracias por mirar esto!
1 pregunta muy interesante. No puedo pensar en una razón por la que no debería estar allí, ¡así que también tengo curiosidad por saber por qué! –
En cuanto a su actualización, porque es redundante; todos los tipos de valores tienen un constructor predeterminado que inicializa todos los valores por defecto (es lo que obtienes cuando llamas 'default (T)'. –
Todas las estructuras tienen ctors predeterminadas en C#. – Linkgoron