Я пытаюсь создать систему наследования интерфейса, которая использует одно и то же свойство, но всегда имеет следующий производный тип. Таким образом, базовое свойство должно быть каким-то образом переопределено или скрыто интерфейсом вывода.
Возьмем, к примеру, два интерфейса: "Человек и женщина", которые происходят с мужем и женой, также взаимодействуют. Интерфейсы "человек и муж" имеют оба свойства "возлюбленной" , а "Женщина и жена" - "дорогая" собственность. Теперь, человек "возлюбленной" собственности имеет тип Женщина, в то время как муж такой же "возлюбленной" собственности должен быть Жена (полученная от Женщины). И то же самое с женской и женской "дорогой" собственностью.
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 type
}
public interface Wife : Woman // extending Woman interface
{
new Husband darling { get; set; } // narrowing "darling" property 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
и Wife.darling
не будут выполняться, потому что типы не совпадают. Есть ли способ сужения типа свойства на производный? Как вы его достигаете на С#?