无法强制类型转换
代码如下
C# code
class Class3 : class3_base
{
public Class3()
: base(3)
{
}
public static void Test1()
{
class3_base cbase = new class3_base(3);
Class3 c = (Class3)cbase; //这行报错
Console.WriteLine(c.m_ni);
}
}
class class3_base
{
public int m_ni;
public class3_base(int i)
{
this.m_ni = i;
}
}
------解决方案--------------------你只能
Class3 c= new Class3();
Console.WriteLine(c.m_ni);
或者
class3_base c= new class3_base(3);
Console.WriteLine(c.m_ni);
或者
Class3 cbase = new Class3();
class3_base c = (class3_base)cbase;
Console.WriteLine(c.m_ni);
或者参考
http://hi.baidu.com/hegao_jay/blog/item/32d60a02f2e12d0c4bfb511c.html
进行修改
------解决方案--------------------cbase的实际类型是class3_base,一般不能直接转换为其子类Class3。
实际类型是A的,不能转换为A的子类;
实际类型是A的子类的,可以转换为A。
实际类型可以用A.GetType().Name查看。
------解决方案--------------------liskov 要注意,子类可替换父类,但真实是父类的实例是无法转换成子类的,因为对于父类来说,子类是未知的。
------解决方案--------------------多看一下多态方面的知识
------解决方案-------------------- 一定要转啊 可以去看下implicit这个关键字
------解决方案--------------------子类不能转换为父类
------解决方案--------------------从来都只是父类引用指向子类对象,不能反过来
------解决方案--------------------C# code
class3_base cbase = new Class3();
Class3 c = (Class3)cbase;
Console.WriteLine(c.m_ni);