一個編譯器錯誤提示:在命名空間中定義的元素無法顯示的聲明為 private, protected, protected internal。
能在命名空間中定義的元素有:類(class),結構(struct),委托(delegate),接口(interface),枚舉(enum)
MSDN提示: protected internal 可訪問性的意思是受保護“或”內部,而不是受保護“和”內部。
我們的訪問修飾符一共有5個級別
public, private, protected, internal, protected internal
1.命名空間下的元素的默認訪問修飾符
根據上面的紅色錯誤提示,可以知道命名空間下只能使用兩種訪問修飾符public和internal。如果沒有顯示的給這些元素訪問修飾符,其修飾符默認為internal 。
public : 同一程序集的其他任何代碼或引用該程序集的其他程序集都可以訪問該類型或成員。
internal : 同一程序集中的任何代碼都可以訪問該類型或成員,但其他程序集不可以訪問。
2.各類型中的成員的默認訪問修飾符
剩下的修飾符主要是正對繼承這個語言特性的,擁有繼承的類型有兩個類(class)和接口(interface)。public,internal同樣可以用於類型成員。
private : 同一類和結構的代碼可以訪問該類型和成員。
protected : 同一類和派生(繼承特性)類中的代碼可以訪問該類型和成員。
protected internal : 同一程序集中的任何代碼或其他程序集中的任何派生類都可以訪問該類型或成員。
MSDN提示 :
1.) 派生類的可訪問性不能高於其基類型。換句話說,不能有從內部類 A 派生的公共類 B。如果允許這種情況,將會使 A 成為公共類,因為 A 的所有受保護的成員或內部成員都可以從派生類訪問。
2.) 成員的可訪問性決不能高於其包含類型的可訪問性。
3.) 可以使用五種訪問類型中的任何一種來聲明類成員(包括嵌套的類和結構)。
接口(interface)
接口成員訪問修飾符默認為public,且不能顯示使用訪問修飾符。
類(class)
構造函數默認為public訪問修飾符。
析構函數不能顯示使用訪問修飾符且默認為private訪問修飾符。
類的成員默認訪問修飾符為private;
枚舉(enum)
枚舉類型成員默認為public訪問修飾符,且不能顯示使用修飾符。
結構(struct)
結構成員默認為private修飾符。
結構成員無法聲明為protected成員,因為結構不支持繼承。
嵌套類型
嵌套類型的默認訪問修飾符為private。 和類,結構的成員默認訪問類型一致。