У меня есть класс 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
, который можно каким-то образом использовать с универсальным методом?
Может показаться, что дженерики чрезмерно используются, и я бы согласился. Я пытаюсь создать объекты бизнес-уровня на основе дозвуковых объектов данных в отдельном проекте.
Примечание: я поставил с лишними пробелами, иначе они будут удалены из вопроса.