2013-12-22 87 views
2

我剛剛讀了一些C#類無法從多個類繼承的地方,同時我還讀了每個C#類都是從基類「Object Class」繼承的。關於多重繼承的困惑

現在我很困惑,如果我讓另一個類使它繼承一些類,那麼它是繼承自類和基類,即兩個類。

這不是違法嗎?

+1

對象類是所有的父類。但它有太多的大孩子。 –

+1

對象 - >字符串(從對象繼承) - > MyClass:String(從字符串繼承)....每個其中一個只從其父代繼承 –

回答

9

每個類都從另一個類繼承。如果你讓你自己的類擴展你的其他類中的一個,那麼它不會直接繼承自Object,而是從你的父類繼承。超類將繼承Object

你的子類將有從Object通過超類可用的所有方法。

這將示出它:

void Main() 
{ 
    Console.WriteLine (new Super().GetType().BaseType); 
    Console.WriteLine (new Sub().GetType().BaseType); 
} 

class Super { } 
class Sub : Super { } 

輸出:

enter image description here

+1

+1代碼部分在答案... –

+0

迂迴筆記:對象類從零類繼承。 – Brian

0

一類可以從一個其它類直接繼承和實現多個接口。
您可以鏈式繼承,例如,類c繼承自類b,而類c繼承自類a。

interface i {} 
class a {} 
class b : a {} // OK 
class c : i,b {} // OK 
class d : a,b {} // Not OK 
1

除了Object本身,每個類都會隱含擴展Object,如果它沒有擴展另一個類的話。因此,所有類都隱含地總是最終從Object延伸出來。

支持多重繼承的唯一通用編程語言是C++,因爲很好的原因,它在大多數語言中明確地不被允許。

0

多繼承意味着類的繼承樹可以根據需要分支(即它可以同時從多個基類繼承)。這是(感謝上帝)在C#中不可能。但只要繼承樹總是隻有一條'大腿',它可以像需要的一樣深(即有一種類似繼承'鏈',其中一個類從另一個繼承)。

0

它不違反規則。

C#中的每個類都將從一個類繼承。該類或者是該類的作者想要擴展的任何類,或者,如果沒有指定,它將擴展Object類。

public class MyClass {} // extends from default Object class 

將是完全一樣

public class MyClass : object {} 

或者,當筆者希望延長一個指定的類:

public class MyClass : AnyBaseClass {} 
6

我只是看了一些地方,C#語言類可以從多個類繼承而來,同時我還讀了每個C#類都是從基類「Object繼承而來的,現在我感到困惑。」

除了對象每個C#類繼承直接恰好一個其他類。對象從沒有類繼承。

C#類可以從任何(非負數)類繼承間接

class Animal : Object {} 
class Giraffe : Animal {} 

我們的規則是否符合?是。對象從沒有類繼承。動物直接從對象繼承,間接從沒有類繼承。長頸鹿直接從Animal繼承,間接從Object繼承。

這消除了矛盾。