ptu*_*utt 8 c# generics subsonic constraints
我有A班:
public class ClassA<T>
Run Code Online (Sandbox Code Playgroud)
B类来自A:
public class ClassB : ClassA<ClassB>
Run Code Online (Sandbox Code Playgroud)
C类来自B类:
public class ClassC : ClassB
Run Code Online (Sandbox Code Playgroud)
现在我有一个带约束的泛型方法
public static T Method<T>() where T : ClassA<T>
Run Code Online (Sandbox Code Playgroud)
好的,现在我想打电话:
ClassC c = Method<ClassC>();
Run Code Online (Sandbox Code Playgroud)
但我得到编译错误说:
Type argument 'ClassC' does not inherit from or implement the constraint type 'ClassA<ClassC>.
然而,编译器将允许:
ClassB b = Method<ClassB>();
Run Code Online (Sandbox Code Playgroud)
我的理解是,这失败了,因为ClassC继承ClassA<ClassB>而不是ClassA<ClassC>
我真正的问题是,是否有可能创建一个派生类ClassB,可以通过某种方式使用泛型方法?
这可能看起来仿制药过度使用,我同意.我正在尝试创建从单独项目中的亚音速数据对象派生的业务层对象.
注意:我已经为<T>添加了额外的空格,否则它们会从问题中删除.
好吧,您可以将Method更改为:
public static T Method<T,U>() where T : ClassA<U> where U : T
Run Code Online (Sandbox Code Playgroud)
这些帮助有用?如果你不能改变方法当然没用多少......