一個編譯器錯誤提示:在命名空間中定義的元素無法顯示的聲明為 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.) 可以使用五種訪問類型中的任何一種來聲明類成員(包括嵌套的類和結構)。
介面成員
介面成員存取修飾詞預設為public,且不能顯示使用存取修飾詞。
類成員
建構函式預設為private存取修飾詞。
解構函式不能顯示使用存取修飾詞且預設為private存取修飾詞。
類的成員預設存取修飾詞為private;
枚舉成員
枚舉類型成員預設為public存取修飾詞,且不能顯示使用修飾符。
結構成員
結構成員預設為private修飾符。
結構成員無法聲明為protected成員,因為結構不支援繼承。
巢狀型別
巢狀型別的預設存取修飾詞為private。 和類,結構的成員預設訪問類型一致。