【发布时间】:2010-06-06 19:45:18
【问题描述】:
我有两个类,一个基类和一个子类。在基类中,我定义了一个通用的虚拟方法:
受保护的虚拟 ReturnType Create() where T : ReturnType {}
然后在我的孩子班我尝试这样做:
protected override ReturnTypeChild Create() // ReturnTypeChild 继承 ReturnType { 返回 base.Create 作为 ReturnTypeChild; }
Visual Studio 给出了这个奇怪的错误:
类型“T”不能用作泛型类型或方法“Create()”中的类型参数“T”。没有从 'T' 到 'ReturnType' 的装箱转换或类型参数转换。
在孩子的 override 上重复 where 子句也会报错:
override 和显式接口实现方法的约束是从基方法继承的,所以不能直接指定
那么我在这里做错了什么?
【问题讨论】:
-
应该是
protected override BarChild Foo<T>()?你能给出正确的名字吗? Foo 和 Bar 伤了我的头。 -
不应该是 return base.Foo
as BarChild();? -
您的代码有各种各样的问题(例如,您的重写方法缺少其通用参数,您的 return 语句在错误的地方有括号等)。如果您对问题进行了最小限度的复制,并解决了所有明显的问题,您更有可能获得有用的答案。
-
啊,StackOverflow 删除了 之间的东西。我很抱歉。我会尝试以某种方式修复它..
-
好的,我把所有东西都修好了 :) 那么,有人吗?