转换为通用基类失败

Ras*_*aby 4 .net c# generics

我没有理解为什么我试图转换为通用基类不起作用.

代码的基本结构如下.

interface ICmd
{
}

class Context
{
}

class Cmd<TContext> : ICmd
    where TContext : Context
{
}

class MyContext : Context
{
}

class MyCmd : Cmd<MyContext>
{
}
Run Code Online (Sandbox Code Playgroud)

所以现在我有一个ICmd的实例,并希望将其转换为Cmd,如下所示

var base = cmd as Cmd<Context>
Run Code Online (Sandbox Code Playgroud)

执行此行后,base始终为null.

将强制转换更改为仅适用于上下文并且有效.

var base = cmd as Cmd<MyContext>       -- this works ???
Run Code Online (Sandbox Code Playgroud)

希望我提供了足够的信息,这是一个协方差\逆转问题吗?

谢谢

Dan*_*rth 9

您可能想要使用共同和逆变.

问题是,Cmd<Context>不是基类的Cmd<MyContext>.

有关更详细的答案,请参阅最近的这个问题:C#泛型继承问题