Hi!
Ich habe eine Vererbungshierarchie von generichen Klassen und möchte eine Collection vom Grundtypen erstellen (also z.B. IEnumerable<ClassicMenuItem<?>>).
public class ClassicMenuItem<B>
where B : FrameworkElement
{
public B MenuElement { get; protected set; }
}
public abstract class ClassicMenuModuleItem<T,B> : ClassicMenuItem<B>
where T : Module
where B : FrameworkElement
{
public T Module { get; set; }
public string FunctionName { get; set; }
}
Die Eigenschaft MenuElement von ClassicMenuItem muss ja mindestenz vom Typ FrameworkElement sein, d.h. es müsste doch eigentlich möglich sein die abgeleiteten Klassen auf ClassicMenuItem<FrameworkElement> casten.
Hat jemand eine Ahnung wie ich diesen Cast hinbekommen?
Schöne Grüße,
Stu
Hi,
wofür willst du denn bitte casten?!
Du könntest zwar so casten - aber VS sagt dir direkt schon, dass der Cast redundant ist.
(Hab Framework-Element durch "Base" ersetzt um mir den Verweis zu sparen)
var x = new X();
var y = x as ClassicMenuModuleItem<Module, Base>;
LG
Also das klappt bei mir nicht.
List<ClassicMenuItem<FrameworkElement>> list = new List<ClassicMenuItem<FrameworkElement>>();
list.Add((ClassicMenuItem < FrameworkElement > ) new ClassicMenuModuleButton<PumpModule>());
ClassicMenuModuleButton ist nochmals von ClassicMenuModuleItem geerbt, aber das tut eigentlich nichts zur Sache.
Ich bekomme die Fehlermeldung dass der Typ nicht konvertiert werden kann. Was ja auch gar nicht so trivial ist, weil es ja tatsächlich auch verschiedene typen sind. Aber vllt gibt es ja noch einen Trick den ich nicht kenne.
Hallo,
beschäftige dich mal mit Covariance and Contravariance.