【问题标题】:What are the Pros and Cons of having Multiple Inheritance?多重继承的优缺点是什么?
【发布时间】:2009-04-19 23:55:04
【问题描述】:

多重继承的优缺点是什么?

而且为什么我们在 C# 中没有多重继承?

更新 好的,由于冲突解决了正在调用哪个父方法等问题,因此目前避免了它。当然,这是程序员要解决的问题。或者,这可以像 SQL 一样解决,其中存在冲突需要更多信息,即 ID 可能需要变为 Sales.ID 才能解决查询中的冲突。

【问题讨论】:

标签: multiple-inheritance


【解决方案1】:

这里是关于多重继承的陷阱的一个很好的讨论:

Why should I avoid multiple inheritance in C++?

以下是 C# 团队关于他们决定不允许多重继承的讨论:

【讨论】:

    【解决方案2】:

    我将在这里根据我一直是 converting to REALbasic 的 C++ 报告编写器(它有接口但只有单继承)给出一个专业人士。

    多重继承使得从实现功能并具有记住状态的属性的小型 mixin 基类组合类变得更加容易。如果做得好,您可以大量重复使用小代码,而无需复制和粘贴类似的代码来实现接口。

    幸运的是,REALbasic 具有 extends 方法,类似于最近在 C# 3.0 中添加到 C# 的 扩展方法。这些有助于解决这个问题,特别是因为它们可以应用于数组。由于折叠了以前多重继承的类,我仍然得到了一些更深的类层次结构。

    【讨论】:

      【解决方案3】:

      这只是工具箱中的另一个工具。有时,它正是正确的工具。如果是这样,由于语言实际上禁止它而不得不找到一种解决方法是一种痛苦,并且会导致将其搞砸的好机会。

      只能针对具体案例找到优缺点。我想实际解决一个问题是相当罕见的,但谁是语言设计者来决定我如何解决一个特定问题?

      【讨论】:

      • 在 C# 中,它还不是工具箱中的工具! :)
      • +1,但据我了解,这只是极少数情况下唯一正确的选择。
      • 就像一个“典型的教科书示例”:家猫既是哺乳动物又是宠物。将其表达为构图充其量是尴尬的。有些哺乳动物不是宠物,有些宠物不是哺乳动物。作为宠物,猫可能有主人、忠诚度数据、税号。作为哺乳动物,它可能具有摄食状态、整体长度、尾巴长度、毛皮颜色。
      【解决方案4】:

      主要缺点是如果两个类有同名的方法,新的子类不知道要调用哪一个。

      在 C# 中,您可以通过在子对象中包含每个父对象的实例来实现多重继承。

      class MyClass
      {
          private class1 : Class1;
          private class2: Class2;
      
          public MyClass
          {
              class1 = new Class1;
              class2 = new Class2;
          }
          // Then, expose whatever functionality you need to from there.
      }
      

      【讨论】:

        【解决方案5】:

        当你从某个东西继承时,你在任何方面都断言你的类是那个(基)类型,除了你可能实现稍微不同的东西或向它添加东西,实际上非常罕见的是你的班级两件事。通常它只是对 2 个或更多事物具有共同的行为,而更好的描述方式通常是让您的类实现多个接口。 (或可能封装,取决于您的情况)

        【讨论】:

          【解决方案6】:

          这是一种帮助我不要拍自己的脚的怪癖,就像在 Java 中一样。

          虽然从多个来源扩展字段和方法很好(想象一个现代手机,它继承自 MP3 播放器、相机、卫星导航和简陋的老式手机),但编译器无法解决冲突一个人。

          【讨论】:

            猜你喜欢
            • 2015-08-14
            • 1970-01-01
            • 1970-01-01
            • 2012-05-26
            • 2012-05-29
            • 1970-01-01
            • 2011-12-29
            • 2011-05-04
            • 1970-01-01
            相关资源
            最近更新 更多