首页 新闻 会员 周边

c# 在子类隐式转换成父类时,父类的值还保留着子类的特有属性,如果从子类得到一个纯净的父类对象

0
悬赏园豆:15 [已解决问题] 解决于 2018-03-07 09:00

如下图,父类CParent实例 parentA是从子类childA 隐式转换获得的,在VS 查看的时候,发现值还是子类的值,如何才能保证得到一个纯净的父类,不包含任何子类属性?

c#
HNLY的主页 HNLY | 初学一级 | 园豆:95
提问于:2017-09-20 19:28
< >
分享
最佳答案
1

你要建立下 对象和引用的概念

对象是内存里真实存在的,引用是指向一个对象的结构描述,告诉你指向的对象里有什么.好让你能使用这个对象.

你用父类引用指向子类对象.子类对象并不会变成父类对象.

代码里的强转转的也是引用.而不是对象.

new出一个对象.就永远是那个对象.因为内存空间是在申请时就固定.你想要修改一块内存的大小结构.就得释放掉从新申请一块.

收获园豆:7
吴瑞祥 | 高人七级 |园豆:29449 | 2017-09-20 21:21

感觉确实是这个道理。VS里面显示的是当前父类对象所执行的值,而且VS比较聪明,帮我们把所指向的值提示了出来,对吧

HNLY | 园豆:95 (初学一级) | 2017-09-21 22:21
其他回答(2)
1

 你创建纯净的父类就是纯净父类了。

引用可以理解为地址,底层的一种内存管理而已。你设想一下你new的时候分配内存,你明明告诉别个分配3,你说你想得到2...,别说机器,人都没法跟你交流,对不对。时间会让你慢慢理解的。

收获园豆:3
花飘水流兮 | 园豆:13560 (专家六级) | 2017-09-20 20:54

e嗯,这个是引用类指向内存空间的问题吧。VS里的提示,应该是所指向的内存中实际的值,而且智能地帮我们把该值的属性展示了出来

支持(0) 反对(0) HNLY | 园豆:95 (初学一级) | 2017-09-21 22:23
2

一般情况下是做不到,但你要这样走歪路不是说不能走通,但限制比较苛刻,必须要父类可以实例化,否则没的玩。

实现也是相当的挫,当然你这需求本来就已经很挫了。

找个会丢失类型信息的序列化方式对对象实例进行序列化,使用序列化后的结果直接反序列化为父类。。。。

我感觉用这种办法会折寿的。。。

收获园豆:5
Daniel Cai | 园豆:10424 (专家六级) | 2017-09-21 01:28

这个确实是个比较鬼魅的方法,哈哈

支持(0) 反对(0) HNLY | 园豆:95 (初学一级) | 2017-09-21 22:15

@HNLY: maping就好,前提是字段相同

支持(0) 反对(0) 广州大雄 | 园豆:188 (初学一级) | 2018-03-07 12:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册