为什么C#舍弃了C++中的多继承而支持单一继承与多接口继承呢?

gigichq 2008-03-27 07:13:52
加精
个人学习C#的疑惑,想不明白,是出于什么设计目的而改变这种继承方式的呢?
...全文
6940 151 打赏 收藏 转发到动态 举报
写回复
用AI写文章
151 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anod 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 46 楼 的回复:]
引用 36 楼 vrhero 的回复:
....
你的例子理解错误...11楼是对的...现实世界是单一继承...多继承的特例也有...例如骡、狮虎兽...那是人类违背自然规律人为制造的...可以称之为怪物...

二义性已经够混乱了...但更糟糕的却是菱形继承结构...就是20楼hdt的例子...

接口不是唯一方案但到目前为止是解决此问题的最好方案...

一个人就是人...除……
[/Quote]


哈哈 不管说的对不对 反正是说的太精彩了 哈哈 顶你个肺疼!!
落曦 2012-10-12
  • 打赏
  • 举报
回复
高手无限多呀
  • 打赏
  • 举报
回复
用不用只是一念之差
xyxy0202 2012-07-03
  • 打赏
  • 举报
回复
路过留印

个人认为:
多继承更符合实际
单继承更适合现在的编译机制

来个大神开发出个可以多继承,但又不会乱套的新语言吧,阿门!
yojinlin 2012-06-29
  • 打赏
  • 举报
回复
學習了。
larissa523 2012-06-29
  • 打赏
  • 举报
回复
学习了。
yuji821 2012-06-28
  • 打赏
  • 举报
回复
二义性

可以通过接口实现多继承
aiqinggongyu1 2011-11-09
  • 打赏
  • 举报
回复
还是没看懂
glglgl2015 2011-09-19
  • 打赏
  • 举报
回复
c# 不得不实现单一继承,它想实现类的多继承也是不可能的,其中的原因是:IL不支持多类的多重继承。
flyforfei 2011-08-20
  • 打赏
  • 举报
回复
没有就是没有 好像这不会给业务造成麻烦吗 有什么业务非要使用多继承才能实现呢
bearfly2011 2011-07-22
  • 打赏
  • 举报
回复
如果你需要多继承类了,那只能说明你的业务的理解和抽象不够.
bearfly2011 2011-07-22
  • 打赏
  • 举报
回复
所以,我觉得C#中类的单继承和接口的多继承是符合现实世界规则的
bearfly2011 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 53 楼 vrhero 的回复:]

to sjjf:

OO是为了化繁为简而不是反其道行之...

现实世界有多复杂不用你说...然而我们谈OO也只是对现实的简单抽象...目前的技术不可能去谈对现实世界完全的抽象...你一定要钻牛角尖别人也没办法...

你引用那么多书上的东西并不能表示什么...尽信书不如无书...另外书也是人写出来的...


我不知道儿子和父亲有何本质的区别,请告诉我本质性的区别。
---……
[/Quote]

父亲跟儿子的区别是,父亲个自己的老婆oo时是和谐的,儿子和自己的老婆xx是也是和谐的,但是缓过来OX或XO都是不和谐的.

------
以上是玩笑话.

其实我觉得,首先要搞清楚一个问题:C#不支持的是类的多继承,而非接口.这点很关键.既然上面好多都拿显示世界来举例,那我也做个类比:

1)首先用现实世界重新定义一下接口/类和对象
接口:所有物质特性和能力的任意组合
类:某一个具体的物种
对象:某一个物种的具体存在
2)如果您认可达尔文的进化论,那么从广义上来讲,现实世界就是单类继承的
前面围了反驳这个观点,聚了驴子、马还有老虎和狮子乱伦的例子。这个也不能说错,但是“从广义上来讲”这就是对类的抽象层次的认识了。你单纯的扣驴子属于什么物种,马属于什么物种,但是你向上一个层次呢?驴子和马属于哺乳类动物吧,在这一点他们算是同一物种吧。可能还会说那花花草草和驴子有什么关系呢?至少他们都是生物,这个没有问题吧。

3)显示世界的表象是复杂的,但是本质是简单的
这个没有人给出证明,但是很多领域都有类似的答案
计算机的本质是:0和1
宇宙的本质是:存在(抽象吧)
还有目前很紧张的南海局势,看起来复杂的像一团乱麻,光美国就挺闹心了,又搀和进来了日本和澳大利亚.最根本的原因是什么?是利益,为什么日本和澳大利亚也插一脚?因为这里是他们海上的生命线,归根结底还是利益.
moqijunnu 2011-07-13
  • 打赏
  • 举报
回复
牛人真多,潜水 学习 吸收
S_enjoin 2011-05-11
  • 打赏
  • 举报
回复
学习。。
sirzxj 2011-05-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 apollo_ts 的回复:]

单一继承更符合真实的世界。面向对象本身起源于实际生活。
[/Quote]
华韩哥哥 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 45 楼 dshirenj 的回复:]
逻辑清晰

class 汽车

class jeep :汽车

class 夏历 :汽车

jeep 是 汽车
夏历 是 汽车
三蹦子 不是 汽车
[/Quote]

现实生活中,你可以拥有儿子...父亲、教师、老公、情人多个角色。但是你对于某个对象而言应该不能同时拥有多个角色吧?比如:对于你的老师而言,你就是学生。如果你又是情人,这就是乱伦。
woaiwoquan 2011-05-05
  • 打赏
  • 举报
回复
這個問題很好理解...你娶兩個老婆或者你有兩個媽媽有什麽後果呢?如果是你有一個老婆 和一個真人倒模的器具 還衝突嗎?!
wt_sanlian 2011-04-03
  • 打赏
  • 举报
回复
幸亏多继承被遗弃了,我从来就没搞明白过...
superzmy凄临雨 2011-03-31
  • 打赏
  • 举报
回复
多继承给程序员带来方便,给编译器带来不幸!
取消多继承,使得编译器可以更简单实现,却把一些东西推给程序员
多继承有利于代码重用。二义性根本不是问题。java真是懒
C#更把这个陋习给学了来
加载更多回复(131)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧