我有A类:
public class ClassA<T>
B类源自A:
public class ClassB : ClassA<ClassB>
C类源自B类:
public class ClassC : ClassB
现在,我有一个具有约束条件的通用方法
public static T Method<T>() where T : ClassA<T>
好的,现在我想调用:
ClassC c = Method<ClassC>();
但我得到了编译错误,说:
Type argument 'ClassC' does not inherit from or implement the constraint type 'ClassA<ClassC>.
但是,编译器将允许:
ClassB b = Method<ClassB>();
我的理解是,这失败了,因为
ClassC
继承了ClassA<ClassB>
而不是ClassA<ClassC>
我真正的问题是,是否可以创建一个从
ClassB
派生的类,该类可以与通用方法一起使用? 似乎泛型已被滥用,我同意。我试图在一个单独的项目中创建从亚音速数据对象派生的业务层对象。
注意:我在后面加上了多余的空格,否则它们将从问题中删除。
最佳答案
好吧,您可以将Method更改为:
public static T Method<T,U>() where T : ClassA<U> where U : T
这些帮助有用?如果您不能更改方法,那没什么用,当然...
关于c# - 派生类的一般约束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/233288/