繁体   English   中英

使父方法返回类型与其派生类类型匹配

[英]Make parent method return type matching its derivated class type

我有一个这样的父类:

public class WebserviceResultPerNode 
{
    public List<DBMappingResult> mapTable { get; set; }

    public static WebserviceResultPerNode newInstanceFromError(ErrorResponse error)
    {
        return new WebserviceResultPerNode
        {
            mapTable = null,
            responseCode = error.responseCode,
            responseMessage = error.responseMessage
        };
    }
}

它有一些派生类,如下所示:

public class WebserviceInsertResultPerNode : WebserviceResultPerNode
{
}

现在我想创建像WebserviceInsertResultPerNode这样的派生类,这样当我调用WebserviceInsertResultPerNode.newInstanceFromError()它们的返回类型与派生类相同,而不是父类。 当前newInstanceFromError返回类型是父类的类型,即WebserviceResultPerNode 我想知道有什么方法可以覆盖WebserviceInsertResultPerNode.newInstanceFromError使其返回类型为WebserviceInsertResultPerNode但我不需要初始化父类的字段而无需重写它们。

我怎样才能重写我的代码来实现这个目标?

您可以通过使用反射简单地实现这一点,提供子类将始终具有无参数构造函数:

public class WebserviceResultPerNode<T> where T : WebserviceResultPerNode<T>, new()
{
    public static T NewInstanceFromError(ErrorResponse error)
    {
        return new T() { … };
    };
}

然后后代类将如下所示:

public class MyWebServiceResult : WebserviceResultPerNode<MyWebServiceResult> { … }

但是,为了分离关注点,我强烈建议将工厂方法分解为单独的工厂类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM