6

ご存知のように、.Netは多重継承をサポートしていません。したがって、継承できるクラスは1つだけです。ただし、デフォルトでは、すべてのクラスが'object'クラスを継承します。それで、他のクラスを継承するときにエラーが発生しないのはなぜですか。

たとえば、A-基本クラス、B-派生クラス。A:Bを使用すると、暗黙的にオブジェクトクラスも(私が思うに)A:B、Objectとして継承されます。.Netが多重継承をサポートしていない場合、どうすれば可能になりますか。

4

2 に答える 2

13

いいえ、そうではありません。継承チェーンは1つだけで、次のようになります。

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

1つのクラスには直接基本クラスが1つしかありませんが、クラスの継承チェーンは長くなる可能性があります。

これがから直接継承することと同じではない理由の例として、オーバーライドする場合、の元の実装を呼び出す方法はありません-バージョンを呼び出すことしかできません(もちろん、それ自体をオーバーライドすることもできます)。BAAToStringBObject.ToString()AToString

于 2012-09-25T06:52:47.330 に答える
3

簡単です。宣言されたクラスは、別のクラスから継承しない場合にのみ継承します。objectコンパイラが行うことは、それが効果的に変化することです

public class MyBaseLessClass
{
}

public class MyBaseLessClass : object
{
}

そのため、すべてのクラスには、継承元のクラスが1つだけあります。(床屋のパラドックスに少し似ています:))

于 2012-09-25T06:56:19.887 に答える