Я пишу обобщенный метод, чтобы использовать его в специальной задаче на шаблоне T4. Метод должен позволить мне использовать специализированные типы из общего интерфейса. Я подумал о следующих сигнатурах:
interface IGreatInterface {
Object aMethodAlpha<U>(U parameter) where U : IAnInterface;
Object aMethodBeta(IAnInterface parameter)
}
public class AnInterestingClass : IAnInterface{}
Когда я пытаюсь реализовать IGreatInterface
, компилятор выдает ошибку для aMethodBeta()
, потому что я заставил свой T4 написать этот метод, используя подтип IAnInterface
(т.е. я хочу реализовать этот метод следующим образом: Object aMethodBeta(AnInterestingClass parameter)
).
Метод aMethodAlpha()
может быть использован, но не так чисто, как я хочу, потому что мой T4 должен генерировать дополнительный код. Я (возможно, ошибочно)
предлагаю, что реализация этого метода, которая должна быть выполнена T4, могла бы быть
Object aMethodAlpha
.
Я думаю, что общие методы не поддерживают контравариантные типы, но я не уверен; я предполагаю, что это способ, которым компилятор не позволяет кодеру использовать конкретный тип, имеющий метод, не определенный в общем типе...