有办法覆盖 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
列表的一部分,用户可能不一定知道或关心他们的放射性粪便。希望你说的有道理。
据我所知,编译器至少不允许这样做。所以我想这是不可能的。但是你有什么建议来解决这个问题呢?