我有 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
的类?可以以某种方式与泛型方法一起使用?
这看起来像是泛型被过度使用,我同意。我正在尝试创建从单独项目中的亚音速数据对象派生的业务层对象。
注意:我在 < T > 中放置了额外的空格,否则它们会从问题中删除。
最佳答案
那么,您可以将方法更改为:
public static T Method<T,U>() where T : ClassA<U> where U : T
这有帮助吗?如果你不能改变Method当然没有多大用处......
关于c# - 派生类的一般约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/233288/