我有一个子类,其中包含一个重载的方法,我知道该方法始终返回在基类中声明的返回类型的特定子类型。如果我按照这种方式编写代码,它将无法编译。由于这可能没有意义,因此让我举一个代码示例:
class BaseReturnType { }
class DerivedReturnType : BaseReturnType { }
abstract class BaseClass {
public abstract BaseReturnType PolymorphicMethod();
}
class DerivedClass : BaseClass {
// Compile Error: return type must be 'BaseReturnType' to match
// overridden member 'BaseClass.PolymorphicMethod()'
public override DerivedReturnType PolymorphicMethod() {
return new DerivedReturnType();
}
}
有没有办法在C#中实现这一点?如果没有,那么实现类似功能的最佳方式是什么?为什么不允许这样做?它似乎不会导致任何逻辑不一致,因为从重载方法返回的任何对象仍然是。也许我还没有考虑到某些事情。或者也许原因是技术或历史原因。