Есть ли способ переопределить типы возвращаемых данных в С#? Если да, то как, а если не почему и как это рекомендуется?
Мое дело в том, что у меня есть интерфейс с абстрактным базовым классом и потомками этого. Я хотел бы сделать это (ну не совсем, но как пример!):
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
, где пользователи могут не знать или заботиться о своем радиоактивном пу. Надеюсь, что это имело смысл...
Насколько я вижу, компилятор не позволяет это по крайней мере. Поэтому я думаю, что это невозможно. Но что бы вы порекомендовали в качестве решения этого?