Ich habe eine Klasse in C# mit einer Vorlage und statischer Methode ähnlich wieerstellen Allgemeine Klasse Instanz von Statische Methode in einer abgeleiteten Klasse
class BClass<T>
{
public static BClass<T> Create()
{
return new BClass<T>();
}
}
Daraus ich eine Klasse ableiten und einen Template-Parameter auf die Basisklasse angeben
class DClass : BClass<int> { }
Ein Problem tritt auf, wenn ich die statische Methode zu verwenden versuchen, eine Instanz von D
class Program
{
static void Main(string[] args)
{
DClass d = DClass.Create();
}
}
zu erstellen 0
Gibt einen Compiler-Fehler "Kann den Typ 'Test.BClass < int>' nicht zu 'Test.DClass' implizit konvertieren."
Das Hinzufügen der unten stehenden Umwandlung führt zu einer Ausnahme für das Ausführen von Castings.
Gibt es irgendeine Möglichkeit, die statische Methode Instanzen der abgeleiteten Klasse zu erstellen? Im Idealfall möchte ich das Äquivalent eines C++ Typedef und ich möchte nicht die folgende Syntax (die funktioniert).
BClass<int> d = DClass.Create();
Dachte nicht, eine Klasse selbst als Typ-Parameter in seiner übergeordneten Klasse verweisen könnte? Paradox Huhn-Ei oder so ... –
Clever UND ein bisschen bizarr! ;) Der einzige Nachteil, den ich hier sehe, ist, dass es scheint, dass es nie eine Möglichkeit geben würde, eine einfache alte 'BClass' zu instanziieren, wie im ursprünglichen Code des OP. –
@Peter, ich habe das tatsächlich ziemlich oft benutzt. Zum Beispiel erlaubt es Ihnen auch, eine bessere Klon-Methode zu erstellen, weil es das Neuschreiben usw. überflüssig macht. – Lucero