首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C#中的子类重写方法中返回子类型?

如何在C#中的子类重写方法中返回子类型?
EN

Stack Overflow用户
提问于 2018-08-10 02:41:34
回答 2查看 0关注 0票数 0

我有一个带有重写方法的子类,它总是返回基类中声明的返回类型的一个特定子类型。如果以这种方式编写代码,它就不会编译。因为这可能没有意义,所以让我给出一个代码示例:

代码语言:txt
复制
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#中有什么方法可以做到这一点吗?如果没有,实现类似目标的最佳方法是什么?为什么不允许?它似乎不允许任何逻辑不一致,因为从重写方法返回的任何对象。

EN

回答 2

Stack Overflow用户

发布于 2018-08-10 11:18:18

可以将该类改为泛型:

代码语言:txt
复制
    class BaseReturnType { }
    class DerivedReturnType : BaseReturnType { }

    abstract class BaseClass<T> where T : BaseReturnType
    {
        public abstract T PolymorphicMethod();
    }

    class DerivedClass : BaseClass<DerivedReturnType>
    {
        // Error: return type must be 'BaseReturnType' to match 
        // overridden member 'BaseClass.PolymorphicMethod()'
        public override DerivedReturnType PolymorphicMethod()
        {
            return new DerivedReturnType();
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2018-08-10 11:46:26

如果引入一个额外的方法来覆盖,你可以这样做:

代码语言:javascript
复制
abstract class BaseClass
{
    public BaseReturnType PolymorphicMethod()
    { return PolymorphicMethodCore();}

    protected abstract BaseReturnType PolymorphicMethodCore();
}

class DerivedClass : BaseClass
{
    protected override BaseReturnType PolymorphicMethodCore()
    { return PolymorphicMethod(); }

    public new DerivedReturnType PolymorphicMethod()
    { return new DerivedReturnType(); }
}

现在,PolymorphicMethod在每个级别都有一个具有正确类型的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档