Ho una classe in C# con un modello e metodo statico simile aCrea Generic Class grado dal Metodo statico in una classe derivata
class BClass<T>
{
public static BClass<T> Create()
{
return new BClass<T>();
}
}
Da questo ho derivare una classe e specificare un parametro di modello per la classe di base
class DClass : BClass<int> { }
un problema si verifica quando si tenta di utilizzare il metodo statico per creare un'istanza di D
class Program
{
static void Main(string[] args)
{
DClass d = DClass.Create();
}
}
Segnala un errore del compilatore "Impossibile convertire implicitamente il tipo 'Test.BClass < int>' in 'Test.DClass'."
Aggiunta dei seguenti lead cast a un'eccezione di esecuzione runtime.
DClass d = (DClass)DClass.Create();
C'è qualche modo per consentire al metodo statico di creare istanze della classe derivata? Idealmente mi piacerebbe l'equivalente di un typedef C++ e non voglio la sintassi qui sotto (che funziona).
BClass<int> d = DClass.Create();
Non pensavo che una classe potesse fare riferimento a se stessa come parametro di tipo nella sua superclasse? Pollo e uovo paradosso o qualcosa del genere ... –
Intelligente E un po 'bizzarro! ;) L'unico svantaggio che vedo qui è che sembra che non ci sarebbe mai stato alcun modo per istanziare un semplice vecchio 'BClass', come nel codice originale dell'OP. –
@Peter, in realtà l'ho usato con successo parecchio. Ad esempio, consente anche di creare un metodo di clonazione migliore perché elimina la necessità di eseguire nuovamente il cast, ecc. – Lucero