【发布时间】:2014-01-31 21:36:19
【问题描述】:
谁能解释一下为什么这段代码 sn-p 不起作用?为什么a不能转换为b? 我在考虑协变和逆变,但据我所知,这不适用于抽象类。
编译错误: 无法将类型“ConsoleApplication1.SVM”转换为“ConsoleApplication1.VMSBase”ConsoleApplication1\Program.cs
class Program
{
static void Main(string[] args)
{
var a = new SVM();
var b = (VMSBase<Model>)a;
}
}
class SVM : VMSBase<SpecialModel>
{
}
class VMSBase<TS> : VMBase<TS> where TS : Model
{
}
class VMBase<T> where T : Model
{
}
class SpecialModel : Model
{
}
class Model
{
}
【问题讨论】:
-
虽然我不能确定,因为这个话题变得令人困惑,我相信解决方案正在将
VMSBase<TS>更改为VMSBase<out TS>。如果这不起作用,则改为使用in修饰符。 -
这是
out修饰符上的documentation。