2014-07-08 59 views
0

我很想知道是否有任何樣品在C#中。我想不出一個禁止繼承的示例,而不是一些商業意圖,所以我想知道一些c#本身的真實世界示例。.Net本身是否具有無法繼承的類?

我知道密封類,我只是在c#本身尋找一些例子,而不是價值類型和結構隱式密封。

+2

我不確定「商業意圖」,但「密封」類防止[Fragile Base Class](http://en.wikipedia.org/wiki/Fragile_base_class)問題。一天到一天的例子是['Thread'](http://msdn.microsoft.com/en-us/library/system.threading.thread(v = vs.110).aspx)class - 你真的不'我想繼承它並改變它的行爲。 –

+0

啊哈,:)現在有道理,你的線程示例真的很有意義。並感謝您的鏈接:) – Breeze

+1

沒問題:)如果你想要一個完整的列表,你可以瀏覽或下載.NET參考資料來源和搜索所有其他案例http://referencesource.microsoft.com/ –

回答

3

你不能從任何結構,sealed類或static類繼承。 C#還禁止使用多種'特殊'類型,包括DelegateEnum,因爲它提供了使用這些類型的其他構造。

我想到的最明顯的例子是System.String

如果你試圖從它繼承這樣的:

public class CustomString : String { } 

你會看到這樣的錯誤:

'CustomString': cannot derive from sealed type 'string'

而且有很多 .NET Framework中其他的例子。我使用反射進行了快速比較,單獨在mscorlib(v4.0)中有856個密封公共類型,而非密封公共類型(包括接口)爲619個。

+0

而不是值類型,如int和structa,你是否有任何其他的例子? – Breeze

+0

'ListItem'是[另一個](http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitem) – Kaf

+0

@Hossein我名爲'string'作爲一個例子,但也有無數其他人。 –

4

是的。所有類爲sealed的類都不能用作基類。

有關sealed課程的更多信息,請查看here

sealed類.NET中的一些例子如下:

+0

!我知道密封類,即時通訊只是爲了一些例子在c#本身,一些東西,而不是價值類型和結構,這些都是隱含的封印你可以說一些? – Breeze

+0

當然,'System.String',已經p.s.w.g已經指出是其中之一。 – Christos

+0

三江源verymuch :) – Breeze

1

除了sealed類,static類也不能被繼承,請參閱about。例如:System.Linq.Enumerable

public static class Inherited : System.Linq.Enumerable 
{ 
} 

這不工作了。