Здесь вам нужна ковариация. В настоящее время C # 4 не допускает дисперсию для параметров типового типа в классах. Если вашему интерфейсу не нужно разрешать использование TContext
в любых позициях ввода, вы можете рассмотреть возможность создания интерфейса и ковариантного в TContext
:
interface ICmd<out TContext> where TContext : Context { }
class Cmd<TContext> : ICmd<TContext> where TContext : Context { }
static void Main(string[] args)
{
Cmd<MyContext> cmd = new Cmd<MyContext>();
var foo = cmd as ICmd<Context>;
}