2016-04-22 37 views
-3

私の以前の知見と同じように、私はいつも複数の継承が.NETではできないことを知りました。それが本当であるなら、私は..私はコードセグメント以下したときに混乱していますASP.NETで複数の継承が可能です

と仮定私が持っている

class Employee{} 

Employeeは、その後、私は名前の別のクラスにEmployeeクラスを継承していますという名前のクラスManager

class Manager : Employee 
{ 

} 

私たちのすべてのクラスは、.NETクラスライブラリで定義されているか、またはユーザ定義で常にSystem.Objectを基本クラスとして持っています。それが真である場合、Managerクラスは2つの基本クラスを持ち、1つはSystem.Objectであり、もう1つはEmployeeであり、System.Objectは暗黙的に継承され、Employeeクラスは明示的に継承され、Managerクラスは複数継承.NETでは実際には不可能です。

だから、何らかの理由で多重継承が可能で、可能であれば、開発者がコードを書くときにコンパイル時エラーが発生するのはなぜでしょうか。

+0

.NETで直接継承できない複数の継承。 – Dilip

+1

あなたは混乱しています - これは多重継承ではありません。マネージャには1つの基本クラスEmployeeがあります。従業員は1つの基本クラスのシステムを持っています。オブジェクト。 ManagerはEmployeeから継承してSystem.Objectのメリットを得ていますが、暗黙のうちにSystem.Objectを魔法のように継承しているわけではありません。 – dbugger

+4

あなたは多重継承の意味を誤解しているようです。クラスに2つ(またはそれ以上)の直接的な親クラスがある場合、複数の継承について説明します。チェーンを継承するクラスのチェーンは、チェーンの長さにかかわらず、依然として単一の継承です。 – laszlok

答えて

0

C#では単一継承しかできません。 System.Objectクラスは、Employeeクラスによって暗黙的に継承されます。そのため、Managerクラスは、System.ObjectであるEmployeeクラスです。

コンパイラがこれを処理するので、明示的にそのクラスEmployee:System.Objectを指定する必要はありません。

要約すると、すべてのクラスはSystem.Objectから継承されます。アプリケーションレベルの継承の場合、一番上のクラスだけがSystem.Objectを基本クラスとして取得します。

+0

KevDev、最後の行(要約では、基本クラスとして)は私の質問を正当化しますが、この文を確認するリンクまたはドキュメントを教えてください。 – MehraG

+0

オブジェクトブラウザは非常にはっきりと表示されます。 – dbugger

+1

ここでのポイントは、System.Objectが[究極の**基本**クラス](https://msdn.microsoft.com/en-us/library/system.object(v = vs.110).aspx)であることです。 。クラスは他の1つのクラスから継承できますが、基本アプリケーションレベルのクラスは常にSystem.Objectから継承されます – KevDev

0

KevDevと他のユーザーが述べているように、単一の継承は.NETでのみ可能です。 MSDNは、Objectクラスがであることを示しています。これは、.NET Frameworkのすべてのクラスの最終的な基本クラスです。です。

これは、単一継承がどのように見えるかです:

Single inheritance

お知らせ**単一の直接**各クラス間のリンク。最初の画像では、全てクラスは「スーパー」または「ベース」クラスShapeから派生していることを

Multiple inheritance

注:今ここに多重継承がどのように見えるかです。 2番目の画像では、Class Cは両方ともClass AClass Bの両方から継承しています。

このような構造を試してみてください。単一継承の場合、バスステーションに1行の人がいるとします。ゲート(通常)は、一度に1人の人しか通過できません。今、ゲートが広く開いていると、複数の人が歩き回ることができます。各人は1つのクラスに似ています。