У меня есть два класса, базовый класс и дочерний класс. В базовом классе я определить общий виртуальный метод:Ошибка компиляции Weird generics
protected virtual ReturnType Create<T>() where T : ReturnType {}
Тогда в моем классе ребенка я пытаюсь сделать это:
protected override ReturnTypeChild Create<T>() // ReturnTypeChild inherits ReturnType { return base.Create<T> as ReturnTypeChild; }
Visual Studio предоставляет эту странную ошибку:
The type 'T' cannot be used as type parameter 'T' in the generic type or method 'Create()'. There is no boxing conversion or type parameter conversion from 'T' to 'ReturnType'.
Повторение предложения where при переопределении ребенка также дает ошибку:
Constraints for override and explicit interface implementation methods are inherited from the base method, so they cannot be specified directly
Так что я делаю неправильно здесь?
Должно ли это быть защищено переопределением BarChild Foo() '? Можете ли вы назвать имена? Фу и Бар повредили мне голову. –
Kobi
И не должно быть возврата base.Foo как BarChild() ;? –
GenericTypeTea
У вашего кода есть всевозможные проблемы (например, в вашем переопределенном методе отсутствует его общий параметр, ваш оператор возврата имеет парсеры в неправильном месте и т. Д.). У вас больше шансов получить полезные ответы, если вы создадите минимальное воспроизведение вашей проблемы, в которой исправлены все очевидные проблемы. – kvb