读书人

无法强制类型转换解决方法

发布时间: 2012-03-16 16:34:56 作者: rapoo

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

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

读书人网 >C#

热点推荐