public 可以被外部成員調用
private 只能在被類的成員調用
protected 只能在被類的成員和該類的子類調用
internal 可以在當前項目調用
public: 對任何類和成員都公開, 無限制訪問;
protected: 僅僅對該類以及該類的派生類公開;
private: 僅僅對該類公開;
internal: 只能值包含該類的程序集中訪問該類;
protected internal: 只能在本類,派生類或者包含該類的程序集中訪問.
比如說:一個人A爲父類,他的兒子B,妻子C,私生子D(注:D不在他家裏)
如果我們給A的事情增加修飾符:
public事件,地球人都知道,全公開
protected事件,A,B,D知道(A和他的所有兒子知道,妻子C不知道)
private事件,只有A知道(隱私?心事?)
internal事件,A,B,C知道(A家裏人都知道,私生子D不知道)
protected internal事件,A,B,C,D都知道,其它人不知道
另外:
貌似protected,internal,protected internal只能修飾嵌套類(nested class),下面代碼編譯錯誤:
protected class C
{
public int Get C()
{
return 3;
}
}
錯誤信息:Namespace elements cannot be explicitly declared as private, protected, or protected internal
微軟官方解釋:不嵌套在其他類型中的頂級類型的可訪問性只能是 internal 或 public。這些類型的默認可訪問性是 internal。
Tips:
1,命名空間上不允許使用訪問修飾符。命名空間沒有訪問限制。
2,一個成員或類型只能有一個訪問修飾符,使用 protectedinternal 組合時除外
最後注意:
1,assembly中的class默認訪問修飾符爲internal
2,類中的字段默認爲private
3,類中的方法默認爲private,包括構造函數