【问题标题】:Why object(root) class does not clashes multiple inheritance为什么对象(根)类不冲突多重继承
【发布时间】:2012-09-16 15:42:22
【问题描述】:

众所周知,.Net 不支持多重继承。因此我们只能继承一个类。但默认情况下,每个类都继承“对象”类。那么为什么当我继承任何其他类时不会发生错误。

例如 A- 基类,B- 派生类。当我使用 A:B 时,隐式对象类也被继承为(我认为) A:B,Object 。如果.Net不支持多重继承怎么可能呢。

【问题讨论】:

  • 将 Object 视为所有其他类的祖父。 A类是孩子,B类是孙子。 B 只有 1 个父类,即 A,对象是 B 的祖父。

标签: c# .net oop


【解决方案1】:

不,不是这样的——只有一个继承链,应该是:

__________
| Object |
----------
    ^
    |
__________
|   A    |
----------
    ^
    |
__________
|   B    |
----------

任何一个类只有一个直接基类,但类的继承链可以很长。

举例说明为什么这个不与直接从A 继承的B 相同,如果A 覆盖ToString,则B 无法调用Object.ToString() 的原始实现 - 它只能调用 A 的版本(当然,还可以覆盖 ToString 本身)。

【讨论】:

    【解决方案2】:

    很简单,声明的类只有继承自object,如果它不继承自另一个类。编译器所做的是它有效地改变了

    public class MyBaseLessClass
    {
    }
    

    到

    public class MyBaseLessClass : object
    {
    }
    

    这样每个类都有恰好一个它继承自的类。 (有点像barber paradox :))

    【讨论】:

      猜你喜欢
      • 2015-04-27
      • 2012-11-14
      • 2011-11-20
      • 2021-10-30
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      相关资源
      最近更新 更多