tengo una clase en C# con una plantilla y método estático similar aCrear Genérico Clase Instancia de Método estático en una clase derivada
class BClass<T>
{
public static BClass<T> Create()
{
return new BClass<T>();
}
}
De esto derivar una clase y especificar un parámetro de plantilla a la clase base
class DClass : BClass<int> { }
se produce un problema cuando intento de usar el método estático para crear una instancia de D
class Program
{
static void Main(string[] args)
{
DClass d = DClass.Create();
}
}
Da un error de compilación "No se puede convertir implícitamente el tipo 'Test.BClass < int>' a 'Test.DClass'."
Agregar el molde a continuación lleva a una excepción de lanzamiento en tiempo de ejecución.
DClass d = (DClass)DClass.Create();
¿Hay alguna manera sucinta de permitir que el método estático cree instancias de la clase derivada? Idealmente, me gustaría el equivalente de un typedef de C++ y no quiero la sintaxis siguiente (que sí funciona).
BClass<int> d = DClass.Create();
¿No crees que una clase podría referirse a sí misma como un parámetro de tipo en su superclase? Paradoja de pollo y huevo o algo ... –
¡Inteligente Y un poco raro! ;) La única desventaja que veo aquí es que parece que nunca habría ninguna forma de instanciar un viejo y simple 'BClass', como en el código original del OP. –
@Peter, en realidad he usado esto con éxito bastante. Por ejemplo, también le permite crear un mejor método de clonación porque elimina la necesidad de volver a emitir, etc. – Lucero