Laden...

Bei Implementierung eines Interfaces als Rückgabetyp eine Unterklasse des Rückgabetyps verwenden

Erstellt von markus.bodlos vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.142 Views
M
markus.bodlos Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren
Bei Implementierung eines Interfaces als Rückgabetyp eine Unterklasse des Rückgabetyps verwenden

Hallo,

habe folgendes Szenario:

2 Klassen A1 & A2 erben von einer gemeinsamen Basisklasse BasisA.

2 Klassen B1 & B2 implementieren implizit das geimeinsame Interface InterB.

Das Interface InterB wiederrum hat eine Eigenschaft vom Typen BasisA im Weiterem nur Prop genannt.

in den beiden Klassen B1 & B2 hab ich die Eigenschaft vom Typ BasisA angelegt. Jedoch verwende ich nicht den Typen BasisA sonder in der Klasse B1 den Typen A1 und in der Klasse B2 den Typen A2.

der Einfachheithalber in Codeform:


class BasisA
    { }

    class A1 : BasisA
    { }

    class A2 : BasisA
    { }

    interface InterB
    {
        BasisA Prop { get; set; }
    }

    class B1 : InterB
    {
        public A1 Prop { get; set; }
    }

    class B2 : InterB
    {
        public A2 Prop { get; set; }
    }

Bei dieser Architektur meldet der Kompiler wie folgt (Klassennamen durch die Pseudonyme ersetzt):

"B1" implementiert den Schnittstellenmember "InterB.Prop" nicht. "B1.Prop" hat nicht den entsprechenden Rückgabetyp "BasisA" und kann "InterB.Prop" daher nicht implementieren.

und

"B2" implementiert den Schnittstellenmember "InterB.Prop" nicht. "B2.Prop" hat nicht den entsprechenden Rückgabetyp "BasisA" und kann "InterB.Prop" daher nicht implementieren.

was das heißt ist mir leider nicht ganz klar. Da ja im Grunde ein impliziter Cast erfolgen sollte.

Danke, mfg Markus

1.044 Beiträge seit 2008
vor 15 Jahren

Hallo markus.bodlos,

im Interface InterB ist definiert, dass der Type BasisA zurückgegeben werden muss. Implementiert jetzt eine Klasse das Interface, dann müssen die Typen auch stimmen. Im Getter B1- und B2-Klasse kannst du aber auch eine Instanz der Klasse A1 oder A2 zurückgeben!

zero_x

M
markus.bodlos Themenstarter:in
205 Beiträge seit 2008
vor 15 Jahren

Hallo zero_x,

danke für deine Antwort, hat geholfen.

mfg