簡體   English   中英

Static class 聲明一個受保護的成員

[英]Static class declaring a protected member

我正在閱讀《C# Language》一書,並從 Vladimir Reshetnikov 那里得到了這個注解:

如果 static class 聲明了受保護或受保護的內部成員,則會發生編譯時錯誤 ( CS1057 )。

我可以知道為什么嗎? 具有受保護成員的 static class 有什么問題? Static class 可以有私有成員所以我猜這個 CS1057 錯誤不是由於可訪問性,但可能是由於編譯問題? 作為受保護的成員可以在子類中被覆蓋......但我不知道為什么。

因為您不能繼承 static class,所以protected沒有任何作用 - 只有publicprivate在這里才有意義。

更多細節可以在這里找到: 為什么我不能繼承 static 類?

受保護的成員意味着可以從子/派生類訪問它們。 但static class的主要特點是:

  1. 僅包含 static 成員;

  2. 無法實例化;

  3. 被密封。

這就是 static 類不能有受保護成員的原因。

.NET 中的 Inheritance 僅適用於實例庫。 Static 方法是在類型級別而不是在實例級別定義的。 這就是為什么覆蓋不適用於 static 方法/屬性/事件...

Static 方法僅在 memory 中保留一次。 沒有為他們創建的虛擬表等。

如果您在 .NET 中調用實例方法,則始終為其提供當前實例。 這被 .NET 運行時隱藏,但它確實發生了。 每個實例方法都有一個指向運行該方法的 object 作為第一個參數的指針(引用)。 static 方法不會發生這種情況(因為它們是在類型級別定義的)。 編譯器應該如何決定 select 調用的方法?

(小矮人)

暫無
暫無

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

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