c#中public,private,protected,internal的區別

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,包括構造函數

發佈了14 篇原創文章 · 獲贊 25 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章