簡體   English   中英

C#繼承和靜態類

[英]C# inheritence and static classes

為什么不能將靜態類繼承為普通類?

如果B繼承自A(是A的子類),則意味着B的實例可以存儲在A類型的變量中,並且它的虛擬方法將調用B類的那些方法。

對於靜態類,您沒有類實例的概念,因此無法繼承。 使用靜態(單例)對常規類的引用可能會更好。

來自靜態類和靜態類成員(C#編程指南)

因此,創建靜態類與創建僅包含靜態成員和私有構造函數的類基本相同。 私有構造函數可防止實例化該類。 使用靜態類的優點是編譯器可以檢查以確保沒有意外添加任何實例成員。 編譯器將保證不能創建此類的實例。

靜態類是密封的,因此無法繼承。 它們不能從Object以外的任何類繼承。 靜態類不能包含實例構造函數; 但是,它們可以包含靜態構造函數。

作為從靜態類繼承的替代方法,可以將擴展方法分配給接口。

您不能繼承靜態類-原因很簡單。 靜態類被標記為抽象,並密封在無法實例化或繼承的已編譯IL中

這實際上是設計使然。 似乎沒有充分的理由繼承靜態類。 它具有公共靜態成員,您始終可以通過類名稱本身訪問它。 我看到的繼承靜態內容的唯一原因是不好的原因,例如保存了幾個打字字符。

也許有理由考慮將靜態成員直接帶入范圍的機制(實際上,我們將在Orcas產品周期之后考慮這一點),但是靜態類繼承並不是要走的路:這是使用錯誤的機制,並且有效僅針對碰巧駐留在靜態類中的靜態成員。

(Mads Torgersen,C#語言PM)

資料來源: 為什么我不能繼承靜態類?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM