Компилятор не может определить конкретный тип Output
. Единственное, что компилятору известно, возвращаемый тип - это какой-то тип, который наследуется от Output
.
Чтобы создать экземпляр TOuptut
, измените код на
static TOutput Method<TInput, TOutput>(TInput input)
where TInput : Input
where TOutput : Output, new()
{
var output = new TOutput() { O = input.I * 2 };
return output;
}
Обратите внимание, что ограничение new()
требует, чтобы конструктор без параметров существовал в TOutput
.