同じプロパティを使用するが、常にさらに派生した型のインターフェイス継承システムを作成しようとしています。したがって、基本プロパティは、派生インターフェイスによって何らかの方法でオーバーライドまたは非表示にする必要があります。
たとえば、Husband と Wife に派生する 2 つのインターフェイス、Man と Woman もインターフェイスです。男性と夫のインターフェースはどちらも「恋人」のプロパティを持ち、女性と妻のインターフェースは「最愛の人」のプロパティを持ちます。ここで、男性の「恋人」プロパティは女性型であり、夫の同じ「恋人」プロパティは妻 (女性から派生) である必要があります。そして、女性と妻の「最愛の」財産についても同じです。
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; } }
}
このコードは間違っています。動作しません。タイプが一致しないため、基本Man.sweetheart
とWoman.darling
プロパティを実装していないこと、および実装されたHusband.sweetheart
andが実行されないことが通知されています。Wife.darling
プロパティの型を派生型に絞り込む方法はありますか? C# でどのように達成しますか?