Escribo una clase genérica de la siguiente manera.¿Por qué la firma de clase genérica requiere especificar new() si el tipo T necesita creación de instancias?
public class Foo<T> :
where T : Bar, new()
{
public void MethodInFoo()
{
T _t = new T();
}
}
Como se puede ver el objeto _t
de tipo T se crea una instancia en tiempo de ejecución. Para admitir la creación de instancias del tipo genérico T, el lenguaje me obliga a poner new() en la firma de la clase. Estoy de acuerdo con esto si Bar es una clase abstracta, pero ¿por qué tiene que ser así si Bar estándar no es una clase abstracta con un constructor público sin parámetros?
El compilador solicita el siguiente mensaje si no se encuentra new().
No se puede crear una instancia del tipo de variable de 'T', ya que no tiene el nuevo() restricción
gracias a todos por sus respuestas. el contenido de la respuesta fue realmente bueno para una lluvia de ideas sobre el tema de la pregunta. –