2012-09-25 1 views
6

私たちが知っているように.Netは多重継承をサポートしていません。したがって、私たちは1つのクラスだけを継承することができます。しかし、すべてのクラスはデフォルトで 'オブジェクト'クラスを継承しています。だから私は他のクラスを継承するときにエラーが発生しません。オブジェクト(ルート)クラスが複数の継承を矛盾させない理由

たとえば、A-ベースクラス、B-派生クラス。 A:Bを使用すると暗黙のうちにオブジェクトクラスも継承されます。A:B、オブジェクトです。 .Netが複数の継承をサポートしていない場合、どうすれば可能になりますか?

+2

オブジェクトを他のすべてのクラスの祖父母と考えてください。クラスAは子、クラスBは孫である。 Bは1つの親クラスしか持たず、AのオブジェクトはBの祖母です。 – shahkalpesh

答えて

13

いいえ、それはそのようではない - になる唯一の継承チェーンは、あります:

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

いずれかのクラスが一つだけの直接の基本クラスを持っていますが、クラスの継承チェーンを長くすることができます。

このAオーバーライドToString場合、Object.ToString()の元の実装を呼び出すBの方法はありません、Aから直接継承Bと同じない理由の一例として - それができのみコールA年代バージョン(そしてToString自体を無効にします)。

3

宣言されたクラスは、他のクラスから継承しないとobjectから継承します。どのようなコンパイラが行うことはそれぞれ、すべてのクラスが、それはから継承正確に一つのクラスを持つように。それが効果的に

public class MyBaseLessClass : object 
{ 
} 

public class MyBaseLessClass 
{ 
} 

を変更するということです(barber paradox :)のようなビット)