日期:2014-05-18  浏览次数:20767 次

C#怎么实现多继承?
比如A类中有个Sing方法,B类中有个Cry方法,怎么实现C类同时继承A类和B类,同时有这2个方法。有没有变通的办法啊???

------解决方案--------------------
不支持多继承,变通的方法可以参考
C#怎么实现多继承
------解决方案--------------------
.net不支持多继承。你只能把A或者B单独提取出接口(使用vs的重构工具可以自动化地提取接口),然后让C继承接口这个接口。例如可以提取A类出来接口IA,设置A类个C类都继承IA。

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



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