C 訪問修飾符 分類 C 訪問修飾符一共有五種,分別為private, internal, protected, protected internal, public。 它們都可以用來修飾類中的成員,如欄位,屬性,方法,事件等。對於修飾class,enum,struct,嵌套類,及其各自預設修飾符的 ...
C#訪問修飾符
分類
C#訪問修飾符一共有五種,分別為private, internal, protected, protected internal, public。
它們都可以用來修飾類中的成員,如欄位,屬性,方法,事件等。對於修飾class,enum,struct,嵌套類,及其各自預設修飾符的情況,我們稍後討論,先來看類內部成員的訪問範圍。
訪問範圍
首先貼出MSDN上關於訪問修飾符的訪問範圍限制說明。
上圖中的訪問修飾修飾的是類的成員,假設類名為TestClass,並且這5種修飾符分別在類TestClass中修飾了5種方法:
class TestClass
{
private void Foo_Private()
{
}
internal void Foo_Internal()
{
}
protected void Foo_Protected()
{
}
protected internal void Foo_ProtectedInternal()
{
}
public void Foo_Public()
{
}
}
那麼訪問修飾符的解釋如下:
- public : 訪問無限制。
- protected : 訪問限製為包含此成員的類TestClass內部,或者TestClass派生類內部。
- internal : 訪問限製為當前程式集內。
- protected internal : 訪問限製為當前程式集,或者TestClass的派生類。
- private : 訪問限製為TestClass內部
五種方法的訪問測試結果如下:
可以看出,protected internal是protected和internal的並集。
class, enum, struct, interface修飾符
在命名空間下,可以用於修飾class, enum, struct, interface的修飾符只有internal和public,指定該結構的訪問範圍是程式集內,還是無限制。
其餘的修飾符private, protected, protected internal不能用來修飾class, enum, struct, interface。為什麼這樣呢?舉個例子,使用private修飾class之後,這個類對於程式集內其它類不可見,那麼這個類就沒有辦法使用,也就毫無意義了。
class, enum, struct, interface預設修飾符
在命名空間下,class, enum, struct, interface的預設修飾符為internal,即:
internal class TestClass
{
}
和
class TestClass
{
}
這兩種定義等價。
class, enum, struct, interface內部成員預設修飾符
先貼MSDN上關於預設修飾符的說明:
其中,enum和interface內部成員預設訪問修飾符為public,而class和struct內部成員的預設訪問修飾符為private。在class中,五種訪問修飾符都可以使用,在struct中,由於不存在繼承關係,protected和protected internal都不能使用。
嵌套類修飾符
嵌套類可以看做是類的內部成員,因此,其訪問修飾符和類的欄位,屬性,方法一樣。來看一段代碼示例:
class TestClass1
{
public class TestClass2
{
}
internal class TestClass3
{
}
protected class TestClass4
{
}
protected internal class TestClass5
{
}
private class TestClass6
{
}
class TestClass7
{
}
}
這樣定義嵌套類沒有任何問題。嵌套類的預設修飾符為private。