首页 新闻 会员 周边 捐助

为什么要支持子类到父类的隐式转换?

0
悬赏园豆:50 [已关闭问题] 关闭于 2015-06-13 10:24

如题,C#为什么要支持子类到父类的隐式转换?这有什么意义?

lonlie的主页 lonlie | 初学一级 | 园豆:135
提问于:2015-06-02 23:47
< >
分享
所有回答(12)
0

继承c++的吧。至于意义吗,不觉得人性化吗?你也可以显式。

jiu~ | 园豆:444 (菜鸟二级) | 2015-06-03 00:40
0

我去。。这种问题有什么好问的。。。如果不能用父类引用指向子类对象的话,哪来的多态。。

吴瑞祥 | 园豆:29449 (高人七级) | 2015-06-03 08:52
0

来个比喻,一个东西把东西装在小箱子装得下,装在大箱子一样装得下,为什么不可以呢?有什么不一样呢?只是空间大一点而已

拾梦小侠ด้้้ | 园豆:713 (小虾三级) | 2015-06-03 09:08
0

在应用上来说,代码设计规范之一就是面向接口编程,依赖到职也是其中的一个体现,你可以搜一下

代码小兵的成长 | 园豆:303 (菜鸟二级) | 2015-06-03 09:11
1

说你是湘潭人吧,你没意见,

说你是弗兰人吧,你也没意见,

说你是天朝人,你应该也没意见吧。

难道你是外星人?

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-06-03 09:38

说的很形象了。 顶一个!

支持(0) 反对(0) 请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-06-03 13:47
0

 可以借鉴一下抽象工厂的设计思想!

hippieZhou | 园豆:578 (小虾三级) | 2015-06-03 12:44
0

楼上的楼上已经说的很形象了。 顶一个!

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-06-03 13:46
0

满足什么(A)是什么(B)的关系才可以抽象成继承关系,里氏替换原则,简单地说,也就是“子类型必须能够替换掉它们的父类型”。一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。在程序中,把父类都替换成它的子类,程序的行为没有变化。自己体会吧。

JeffWong | 园豆:2328 (老鸟四级) | 2015-06-03 15:37

你说的有道理,但我不确定是因为有了里氏替换原则才将语言设计成这样,还是其他。

支持(0) 反对(0) lonlie | 园豆:135 (初学一级) | 2015-06-04 12:48
0

不同类型要赋值,就存在类型转换。

子类到父类 是隐式转换,这种转换 是安全的,所以帮你转了,免得你转而已,你可以显示转换或者其他方式 转 如果你不嫌麻烦。

Qlin | 园豆:2403 (老鸟四级) | 2015-06-03 16:14

嗯,这种转换是安全的没错,但我想讨论的是,这种转换的必要性。比如数据类型之间的转换是为了计算,那这种引用类型之间的转换的理由又是什么呢?(楼上JeffWong的说法有道理,但我不确定是因为有了里氏替换原则才将语言设计成这样,还是其他。)

支持(0) 反对(0) lonlie | 园豆:135 (初学一级) | 2015-06-04 12:48

@lonlie: 

静态语言 类型是确定的,不转换,类型不对就会报错。

不管隐式还是转换方法,转换是为了赋值,方便初始化值,跟什么原则也没啥关系,语法问题而已。

如:object是基类,都可以隐式转换它,你觉得必要性在哪呢,觉得显示转换或者 转换方法必要性在哪呢?...

不明白 在纠结啥....

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2015-06-04 14:49

@Qlin: 如果子类不能直接转为父类将会怎么样,或者说子类为什么要可以转为父类?

支持(0) 反对(0) lonlie | 园豆:135 (初学一级) | 2015-06-04 16:50
0

语法糖,减少写代码

浅草青晨 | 园豆:904 (小虾三级) | 2015-06-03 17:41
0

子类到父类的隐式转换,即以父类型的引用使用子类的实例。

由于单根继承,子类是父类的超集。

所以父类的方法调用子类全部能够实现。

因此使用任何父类的方法,编译器都能找到子类中的对应方法。

既然对应方法永远都能找到,那么永远不会引发找不到方法的异常。

因此,子类到父类的转换是安全的。

所以子类到父类的转换不需要额外的保护和提示。

xmodygetz | 园豆:575 (小虾三级) | 2015-06-05 08:55
0

为什么不呢?这样不是很爽吗?

hexllo | 园豆:318 (菜鸟二级) | 2015-06-05 10:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册