【发布时间】:2011-11-30 15:08:01
【问题描述】:
在我的 Silverlight 4 应用程序中,我开始创建和使用一些泛型,现在我偶然发现了以下问题:
在一个非泛型类中,我有一个抽象方法,它返回一个泛型类:
public abstract class DTO_Base()
{
public abstract ServiceModelBase<ServiceNodeBase> CreateBusinessObject();
}
泛型类的定义方式如下:
public abstract class ServiceModelBase<RootNodeType> where RootNodeType : ServiceNodeBase
自然,从 DTO_Base 派生的类将不得不重写 CreateBusinessObject 方法:
public class DTO_Editor : DTO_Base
{
public override ServiceModelBase<ServiceNodeBase> CreateBusinessObject()
{
// the object to return have to be of type ServiceModelEditor
// which is derived from ServiceModelBase<ServiceNodeEditor>
// public class ServiceModelEditor : ServiceModelBase<ServiceNodeEditor>
// ServiceNodeEditor is derived from ServiceNodeBase
// public class ServiceNodeEditor : ServiceNodeBase
ServiceModelEditor target = new ServiceModelEditor()
...
Functions to populate the 'target'
...
return target;
}
}
return target; 行会导致错误,指出无法在ServiceModelBase<ServiceNodeBase> 中隐式转换类型ServiceModelEditor。此外,通过目标作为ServiceModelBase<ServiceNodeBase> 的显式转换不起作用。
我必须如何实现这个方法才能工作?
【问题讨论】:
标签: c# generics inheritance overriding