日期:2014-05-18  浏览次数:21050 次

无法强制类型转换
代码如下

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);