I have class A:
public class ClassA<T>
Class B derives from A:
public class ClassB : ClassA<ClassB>
Class C derives from class B:
public class ClassC : ClassB
Now I have a generic method with constraints
public static T Method<T>() where T : ClassA<T>
OK, now I want to call:
ClassC c = Method<ClassC>();
but I get the compile error saying:
Type argument 'ClassC' does not inherit from or implement the constraint type 'ClassA<ClassC>.
Yet, the compiler will allow:
ClassB b = Method<ClassB>();
My understanding is that this fails because ClassC
inherits ClassA<ClassB>
instead of ClassA<ClassC>
My real question is, is it possible to create a class deriving from ClassB
that can be used in some way with the generic method?
This may seem like generics are overused and I would agree. I am trying to create business layer objects deriving from the subsonic data objects in a separate project.
Note: I have put the < T > with extra spaces otherwise they get stripped from the question.
EDIT: (Jon Skeet) Removed the extra spaces and set to code font appropriately to make it more readable :)