我有一个这样的家长班:
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> { … }
但是,为了factory method,我强烈建议将separation of concerns分解为单独的工厂类。