Есть ли способ переопределить типы возврата в C #? Если да, то как, а если нет, то почему и как это рекомендуется делать?
В моем случае у меня есть интерфейс с абстрактным базовым классом и его потомками. Я хотел бы сделать это (хорошо, не совсем, но в качестве примера!):
public interface Animal
{
Poo Excrement { get; }
}
public class AnimalBase
{
public virtual Poo Excrement { get { return new Poo(); } }
}
public class Dog
{
// No override, just return normal poo like normal animal
}
public class Cat
{
public override RadioactivePoo Excrement { get { return new RadioActivePoo(); } }
}
RadioactivePoo
конечно, наследуется от Poo
.
Моя причина для этого заключается в том, чтобы те, кто использует объекты Cat
, могли использовать свойство Excrement
, не приводя Poo
к RadioactivePoo
, в то время как, например, Cat
все еще может быть частью Animal
список, в котором пользователи могут не знать или заботиться о своем радиоактивном состоянии. Надеюсь, что это имеет смысл ...
Насколько я вижу, компилятор не позволяет этого по крайней мере. Так что я думаю, что это невозможно. Но что бы вы порекомендовали в качестве решения этой проблемы?