是否有人可以解释为什么这代码片段是不是工作?为什么不是一个castable到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'到'VMSBase '。如果这不起作用,它将是'in'修饰符。 –
这是'out'修饰符上的[documentation](http://msdn.microsoft.com/zh-cn/library/dd469487.aspx)。 –