无法强制类型转换
代码如下
- 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);