Вы пытаетесь добавить ограничение на параметр типа, который не существует в списке параметров типа.
Это то, что вы имели в виду?
interface IRegistration<TImplementation> where TImplementation : TContract
{
void As<TContract>();
}
Хотя это не скомпилируетсялибо - у вас не может быть универсального ограничения для универсального типа.
Это скомпилирует, хотя, вероятно, не создаст нужное ограничение для самого метода:
interface IRegistration<TImplementation,TContract> where TImplementation : TContract
{
void As<TContract>();
}
Посмотрите, еслиэто будет делать:
interface IRegistration<TImplementation,TContract> where TImplementation : TContract
{
void As();
}
Таким образом, каждый раз, когда вы используете TImplementation
, оно будет ограничено значением TContract
, и вы все равно можете использовать TContract
в методе As
.
Вы можете найти больше информации здесь - посмотрите на раздел в конце страницы, озаглавленный «Введите параметры как ограничения».