如题,C#为什么要支持子类到父类的隐式转换?这有什么意义?
继承c++的吧。至于意义吗,不觉得人性化吗?你也可以显式。
我去。。这种问题有什么好问的。。。如果不能用父类引用指向子类对象的话,哪来的多态。。
来个比喻,一个东西把东西装在小箱子装得下,装在大箱子一样装得下,为什么不可以呢?有什么不一样呢?只是空间大一点而已
在应用上来说,代码设计规范之一就是面向接口编程,依赖到职也是其中的一个体现,你可以搜一下
说你是湘潭人吧,你没意见,
说你是弗兰人吧,你也没意见,
说你是天朝人,你应该也没意见吧。
难道你是外星人?
说的很形象了。 顶一个!
可以借鉴一下抽象工厂的设计思想!
楼上的楼上已经说的很形象了。 顶一个!
满足什么(A)是什么(B)的关系才可以抽象成继承关系,里氏替换原则,简单地说,也就是“子类型必须能够替换掉它们的父类型”。一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。在程序中,把父类都替换成它的子类,程序的行为没有变化。自己体会吧。
你说的有道理,但我不确定是因为有了里氏替换原则才将语言设计成这样,还是其他。
不同类型要赋值,就存在类型转换。
子类到父类 是隐式转换,这种转换 是安全的,所以帮你转了,免得你转而已,你可以显示转换或者其他方式 转 如果你不嫌麻烦。
嗯,这种转换是安全的没错,但我想讨论的是,这种转换的必要性。比如数据类型之间的转换是为了计算,那这种引用类型之间的转换的理由又是什么呢?(楼上JeffWong的说法有道理,但我不确定是因为有了里氏替换原则才将语言设计成这样,还是其他。)
@lonlie:
静态语言 类型是确定的,不转换,类型不对就会报错。
不管隐式还是转换方法,转换是为了赋值,方便初始化值,跟什么原则也没啥关系,语法问题而已。
如:object是基类,都可以隐式转换它,你觉得必要性在哪呢,觉得显示转换或者 转换方法必要性在哪呢?...
不明白 在纠结啥....
@Qlin: 如果子类不能直接转为父类将会怎么样,或者说子类为什么要可以转为父类?
语法糖,减少写代码
子类到父类的隐式转换,即以父类型的引用使用子类的实例。
由于单根继承,子类是父类的超集。
所以父类的方法调用子类全部能够实现。
因此使用任何父类的方法,编译器都能找到子类中的对应方法。
既然对应方法永远都能找到,那么永远不会引发找不到方法的异常。
因此,子类到父类的转换是安全的。
所以子类到父类的转换不需要额外的保护和提示。
为什么不呢?这样不是很爽吗?