[英]Casting to Generic base class failing
我不明白为什么我尝试强制转换为通用基类不起作用。
代码的基本结构如下。
interface ICmd
{
}
class Context
{
}
class Cmd<TContext> : ICmd
where TContext : Context
{
}
class MyContext : Context
{
}
class MyCmd : Cmd<MyContext>
{
}
所以现在我有一个 ICmd 的实例并想将它转换为 Cmd 如下
var base = cmd as Cmd<Context>
执行此行后,base 始终为空。
将转换更改为特定于上下文并且它有效。
var base = cmd as Cmd<MyContext> -- this works ???
希望我提供了足够的信息,这是协方差\\逆变问题吗?
谢谢
你在这里需要的是协方差。 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>;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.