我剛剛讀了一些C#類無法從多個類繼承的地方,同時我還讀了每個C#類都是從基類「Object Class」繼承的。關於多重繼承的困惑
現在我很困惑,如果我讓另一個類使它繼承一些類,那麼它是繼承自類和基類,即兩個類。
這不是違法嗎?
我剛剛讀了一些C#類無法從多個類繼承的地方,同時我還讀了每個C#類都是從基類「Object Class」繼承的。關於多重繼承的困惑
現在我很困惑,如果我讓另一個類使它繼承一些類,那麼它是繼承自類和基類,即兩個類。
這不是違法嗎?
每個類都從另一個類繼承。如果你讓你自己的類擴展你的其他類中的一個,那麼它不會直接繼承自Object
,而是從你的父類繼承。超類將繼承Object
。
你的子類將有從Object
通過超類可用的所有方法。
這將示出它:
void Main()
{
Console.WriteLine (new Super().GetType().BaseType);
Console.WriteLine (new Sub().GetType().BaseType);
}
class Super { }
class Sub : Super { }
輸出:
+1代碼部分在答案... –
迂迴筆記:對象類從零類繼承。 – Brian
一類可以從一個其它類直接繼承和實現多個接口。
您可以鏈式繼承,例如,類c繼承自類b,而類c繼承自類a。
interface i {}
class a {}
class b : a {} // OK
class c : i,b {} // OK
class d : a,b {} // Not OK
除了Object本身,每個類都會隱含擴展Object,如果它沒有擴展另一個類的話。因此,所有類都隱含地總是最終從Object延伸出來。
支持多重繼承的唯一通用編程語言是C++,因爲很好的原因,它在大多數語言中明確地不被允許。
多繼承意味着類的繼承樹可以根據需要分支(即它可以同時從多個基類繼承)。這是(感謝上帝)在C#中不可能。但只要繼承樹總是隻有一條'大腿',它可以像需要的一樣深(即有一種類似繼承'鏈',其中一個類從另一個繼承)。
它不違反規則。
C#中的每個類都將從一個類繼承。該類或者是該類的作者想要擴展的任何類,或者,如果沒有指定,它將擴展Object
類。
public class MyClass {} // extends from default Object class
將是完全一樣
public class MyClass : object {}
或者,當筆者希望延長一個指定的類:
public class MyClass : AnyBaseClass {}
我只是看了一些地方,C#語言類可以從多個類繼承而來,同時我還讀了每個C#類都是從基類「Object繼承而來的,現在我感到困惑。」
除了對象每個C#類繼承直接從恰好一個其他類。對象從沒有類繼承。
C#類可以從任何(非負數)類繼承間接。
class Animal : Object {}
class Giraffe : Animal {}
我們的規則是否符合?是。對象從沒有類繼承。動物直接從對象繼承,間接從沒有類繼承。長頸鹿直接從Animal繼承,間接從Object繼承。
這消除了矛盾。
對象類是所有的父類。但它有太多的大孩子。 –
對象 - >字符串(從對象繼承) - > MyClass:String(從字符串繼承)....每個其中一個只從其父代繼承 –