2014-01-30 35 views
2

繼承樹在c#中可以有多深? 假設我有一個類A,並且我創建了一個新的類B,它源於A。比我創建一個名爲C的新類來源於B等等。繼承樹在c#中有多深?

我可以用這種方式創建多少個班級,實際上是A

繼承樹是否有限制?

public class A 
{ 
... 
...   
} 

public class B:A 
{ 
... 
...      
} 

public class C:B 
{ 
... 
... 
} 

public class D:C 
{ 
... 
... 
} 
+1

理論上沒有,但有一些美麗的東西叫做接口。 –

+1

你究竟需要多深?要有一個非常深刻的繼承結構最終會變得難以維繫。 –

+3

這是一個問題,如果你必須*問*,你可能已經做錯了。 (另外,如果它存在的話,這個限制將是一個.NET,而不是C#,因爲不同語言的類可以相互繼承) –

回答

5

C#規範沒有限制。

基於內部表的大小,每個實現最可能具有一些荒謬的大限制。

這是不可能的,你在任何平臺上,然後按正常的手寫代碼。自動生成的代碼有機會達到編譯器/運行時限制(如方法大小或名稱長度)。如果感興趣,你可以嘗試自己達到極限 - 通常情況下軟件限制是2的冪(如16K/65K開始)。

4

沒有限制,但保持繼承層次結構非常簡單,這是非常好的指導原則。

也有代碼分析,你可以找到在MSDN裏面設置警告當層次是超過4級深:

CA1501: Avoid excessive inheritance

原因
A型多於四個級別深入其繼承層次結構。

+0

Microsoft不遵循此規則。例如'System.Windows.Forms.Form' –

+2

@SriramSakthivel這不是一條規則,它是一個指導原則。如果你有充分的理由違反準則,你可以這樣做。 – MarcinJuraszek