Laden...

Vererbung von generischen klassen; Casten

Erstellt von Stu42 vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.584 Views
S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 7 Jahren
Vererbung von generischen klassen; Casten

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

1.029 Beiträge seit 2010
vor 7 Jahren

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

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 7 Jahren

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.