參考資料:
https://www.cnblogs.com/net-sky/p/10345566.html
《C# 7 核心編程》
因為一直區分不清什么時候該用什么訪問控制修飾符,在這里稍微把這兩天從網上查到的資料總結一下。
-
default(默認的訪問修飾符):
- 方法的默認訪問修飾符為 private
- 類 class 的默認訪問修飾符為 internal,構造函數默認為 public,析構函數不能顯示使用訪問修飾符且默認為 private 訪問修飾符,類的成員默認為private
- 接口 interface 的成員默認訪問修飾符為 public,且不能顯式使用訪問修飾符
- 枚舉 enum 類型成員默認為 public,且不能顯式使用訪問修飾符
- 結構體 struct 成員默認private,且不能用protected修飾,因為 struct 沒有“繼承”特性
- 嵌套類型默認 private,與 class、struct 的成員的默認訪問類型一致
- 命名空間下的元素的默認訪問修飾符:
- public: 同一程序集的其他任何代碼或引用該程序集的其他程序集都可以訪問該類型或成員(類內、程序集內、程序集外、子類中等)
- internal: 同一程序集中的任何代碼都可以訪問該類型或成員,但其他程序集不可以訪問。(類內、程序集內、子類中)
-
剩下的修飾符主要針對“繼承”特性,class 與 interface 均有該特性:
- private: 同一類和結構的代碼可以訪問該類型和成員,即只能在類內訪問,完全私有
- protected: 同一類和派生(繼承特性)類中的代碼可以訪問該類型和成員,受保護
- protected internal: 同一程序集中的任何代碼或其他程序集中的任何派生類都可以訪問該類型或成員,這兩個修飾符組合使用很容易誤導人。該訪問修飾符允許在本類,派生類或者包含該類的程序集中訪問,這也被用於實現繼承
-
internal 與 protected internal 區別:internal 修飾的成員在其他程序集中的派生類中無法訪問
-
類特有的訪問控制修飾符:
- sealed:不能被繼承的類
- partial:可以聲明在不同文件中的同一個類