我收到错误消息“无法从类型'SpecificT'隐式转换为在方法ToViewDocument中键入'The.Right.Namespace.SpecificT'。
似乎在这种方法中我正在重新定义类型SpecificT。
这是给我带来麻烦的方法:
public override SpecifiedT
ToViewDocument<SpecifiedT>(XmlEntity entity, DocKey docKey)
{
switch (docKey.IdArchive)
{
case IdArchive.A:
return ToAViewData((XmlDocA)entity, docKey) //error at this line;
default:
return ToBViewData((XmlDocB)entity, docKey) //error at this line;
}
}
private SpecifiedT ToAViewData(XmlDocMassima entity, DocKey documentKey)
{
SpecifiedT result = new SpecifiedT();
//map result on entity result
//...
return result;
}
该函数会覆盖基类的方法:
public abstract T ToViewDocument<T>(XmlEntity entity, DocKey documentKey) where T : ViewDocumentDto, new();
此外,SpecifiedT扩展了T,所以我无法理解为什么编译器无法将SpecifiedT识别为T的子类。
答案 0 :(得分:3)
您不能覆盖泛型方法并指定类型参数。您可以将type参数添加到包含的类中。然后,当您实现类时,type参数将设置为具体类型。
abstract class Container<T>
where T : ViewDocumentDto, new()
{
public abstract T ToViewDocument(XmlEntity entity, DocKey documentKey);
}
class SpecificContainer : Container<SpecificViewDocumentDto>
{
public override SpecificViewDocumentDto ToViewDocument(XmlEntity entity, DocKey documentKey)
{
}
}