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
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
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.