私はクラス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>
OK、今私は電話したい:
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 > に余分なスペースを入れました。そうしないと、質問から削除されます。