C#怎么实现多继承?

misery2011 2012-04-29 03:49:49
比如A类中有个Sing方法,B类中有个Cry方法,怎么实现C类同时继承A类和B类,同时有这2个方法。有没有变通的办法啊???
...全文
626 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
misery2011 2012-04-29
  • 打赏
  • 举报
回复
好,感谢各位的回复,尤其是sp1234的精彩讲解,果然是大师级人物。加到100,结帖了。
evelyn_green 2012-04-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
不支持多继承,变通的方法可以参考
C#怎么实现多继承
[/Quote]
单继承多实现;多继承用C++
  • 打赏
  • 举报
回复
使用接口当然还有很令人“痛苦”的事情。当你的大量类型都继承了IA,发现IA非常自然地应该在设计中增加一个特性,怎么办?如果是是扩展父类,自然不在话下。可是扩展接口,你就必须逐一修改使用了此接口的所有源代码,这可真是痛苦。
  • 打赏
  • 举报
回复
1.用接口。
2.把A类,B类的实例作为C类的组成部分使用。
  • 打赏
  • 举报
回复
.net不支持多继承。你只能把A或者B单独提取出接口(使用vs的重构工具可以自动化地提取接口),然后让C继承接口这个接口。例如可以提取A类出来接口IA,设置A类个C类都继承IA。

不过接口用多了也和痛苦,因为很多时候你想要的是在C类中自动化地继承A类已经实现的代码,而不是在C中去别扭地写上将Sing方法委派调用另外一个A类对象实例的Sing代码这种诡异的实现方法。但是可惜.net就是不支持多重继承,所以只能额外使用接口。



另外,非常重要地,坚决要杜绝“为了继承而继承”的坏毛病。假设C继承了A,那么一个C实体“就是(is-a)”一个A实体,给不懂计算机软件的人也应该用自然语言经明白这个继承性。如果你跟别人说“白马是哺乳动物,同时白马也是丹顶鹤”,这后半句就是诡异的。你不能因为想让白马也有“白色”这个特性而让它去继承丹顶鹤类型。为了省事、少写代码而搞继承,是违背面向对象设计基本原则的。面向对象设计的目的是设计软件,是要用来跟各方面人沟通的工具,而不是为了你少写几条代码。
孟子E章 2012-04-29
  • 打赏
  • 举报
回复
不支持多继承,变通的方法可以参考
C#怎么实现多继承

110,538

社区成员

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

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

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