我有一个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>();
但是我收到了编译错误,提示:
类型参数“ClassC”不继承或实现约束类型“ClassA<ClassC>”。
然而,编译器会允许以下代码:
ClassB b = Method<ClassB>();
我的理解是这个失败了,因为
ClassC
继承自ClassA<ClassB>
而不是ClassA<ClassC>
我的真正问题是,是否可能创建一个从ClassB
派生的类,并以某种方式与通用方法一起使用?这似乎是滥用泛型,我同意。我正在尝试创建业务层对象,这些对象从单独的项目中的subsonic数据对象派生而来。
注意:我已经在< T >中添加了额外的空格,否则它们会被从问题中删除。