首页 新闻 赞助 找找看

c#类型转换问题

0
悬赏园豆:15 [已解决问题] 解决于 2014-12-12 14:11

例如

int a=0;

doubel b=a;

这样隐式转换是没问题的,我的理解是int类型的长度比doubel的长度短

doubel a=0;

int b=(int)a;

在知道a的长度不会超过int的长度时也是可以的

class A

class B:A

B b=new B();

A a=b;

这样是正确的,但是按照我的理解b的成员和应该是多余a的,这样转换难道就不会有数据丢失?就象我上面理解的大的转成小的不是应该显示转换吗?

反过来

A a=new A();

B b=(B)a;

小的转成大的不应该隐式就行吗?

 

这个问题困扰我很久,求跪求解答,谢谢

末流的主页 末流 | 初学一级 | 园豆:24
提问于:2014-12-10 21:16
< >
分享
最佳答案
2

别搞把类型转换同多态搞混淆了。

int b=(int)a; // 类型转换,执行的是内存拷贝

A a=b;// 多态,允许父类指针指向派生类对象。

收获园豆:7
Launcher | 高人七级 |园豆:45045 | 2014-12-11 09:17
其他回答(1)
0

首先说A a =  b; 因为B继承自A,所以可以理解为B的成员>=A。那么直接将b的地址(注意只是地址)给a,a所有的成员都能在b中找到对应。同时,由于是引用的变化,那么b的实际数据是没变化的,那么这个时候反射a的话,能拿到完整的b的成员。

对于B b=(B)a;由于a的成员少,b不知道怎么映射,所以就不行了。引用类型可不能像值类型那样损失精度。

收获园豆:8
幻天芒 | 园豆:37175 (高人七级) | 2014-12-11 09:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册