У меня есть Класс A:Generic контрсилами на производных классах
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
, которые могут быть использованы каким-либо образом с общим методом?
Это может показаться, что дженерики злоупотребляют, и я согласен. Я пытаюсь создать объекты бизнес-уровня, происходящие из дозвуковых объектов данных в отдельном проекте.
Примечание: Я положил < T> с дополнительными пробелами, иначе они будут лишены ответа.
Да, это решает проблему. Фактически этот метод: DB.Get < T > (string primaryColumnValue) T используется для возврата объекта данных из базы данных. Похоже, что становится все сложнее, что это должно быть ... Мне нужно отступить и переосмыслить архитектуру. – ptutt 2008-10-25 12:26:00