Ich versuche, ein Schnittstellenvererberungssystem zu erstellen, das dieselbe Eigenschaft aber immer von einem weiteren abgeleiteten Typ verwendet. Daher sollte die Basiseigenschaft durch die ableitende Schnittstelle irgendwie überschrieben oder verborgen werden.Können abgeleitete C# -Schnittstelleneigenschaften die Eigenschaften der Basisschnittstelle mit demselben Namen überschreiben?
Nehmen Sie zum Beispiel zwei Schnittstellen, Mann und Frau, die in Mann und Frau, auch Schnittstellen ableiten. Mann und Ehemann Schnittstellen haben beide eine "Schatz" Eigenschaft, während Frau und Frau eine "Liebling" Eigenschaft haben. Nun ist die "Schatz" -Eigenschaft des Mannes vom Typ Frau, während die "Schatz" -Eigenschaft des Ehemanns eine Frau (abgeleitet von Frau) sein sollte. Und das Gleiche mit dem "Liebling" der Frau und der Frau.
public interface Man // base interface for Husband
{
Woman sweetheart { get; set; }
}
public interface Woman // base interface for Wife
{
Man darling { get; set; }
}
public interface Husband : Man // extending Man interface
{
new Wife sweetheart { get; set; } // narrowing "sweetheart" property's type
}
public interface Wife : Woman // extending Woman interface
{
new Husband darling { get; set; } // narrowing "darling" property's type
}
public class RandomHusband : Husband // implementing the Husband interface
{
private RandomWife wife;
public Wife sweetheart { get { return wife; } set { wife = value; } }
}
public class RandomWife : Wife // implementing the Wife interface
{
private RandomHusband husband;
public Husband darling { get { return husband; } set { husband = value; } }
}
Dieser Code ist falsch, es funktioniert nicht. Ich werde benachrichtigt, dass ich die grundlegenden Eigenschaften Man.sweetheart
und Woman.darling
nicht implementiert habe und dass die implementierten Husband.sweetheart
und Wife.darling
nicht tun, weil die Typen nicht übereinstimmen. Gibt es eine Möglichkeit, den Typ einer Eigenschaft auf einen abgeleiteten zu beschränken? Wie erreichst du es in C#?
interessante Frage :) – nawfal