1.五種訪問修飾符包括哪些?
public、private、protected、internal、protected internal
2.五種訪問修飾符的作用范圍?
public :公有訪問。不受任何限制。
private : 私有訪問。只限於本類成員訪問,子類,實例都不能訪問。
protected :保護訪問。只限於本類和子類訪問,實例不能訪問。
internal :內部訪問。只限於本項目內訪問,其他不能訪問。
protected internal : 內部保護訪問。只限於本項目或是子類訪問,其他不能訪問
實例講解一下這五種訪問修飾符的作用范圍:
基礎代碼:

1 class BaseClass 2 { 3 public string GetaPublicString() 4 { 5 return "Public String"; 6 } 7 8 protected string GetaProtectedString() 9 { 10 return "Protected String"; 11 } 12 13 private string GetaPrivateString() 14 { 15 return "Private String"; 16 } 17 18 internal string GetaInternalString() 19 { 20 return "Internal String"; 21 } 22 23 protected internal string GetaProtectedInternalString() 24 { 25 return "Protected Internal String"; 26 } 27 public void Test() 28 { 29 30 } 31 32 }
測試private作用范圍:
本類中:
圖1
結論:在BaseClass類中,在方法Test()中,可以調用私有方法GetaPrivateString()
子類中:
圖2
結論:在AClass中,只繼承了父類,在方法Test2()中,調用父類的方法,沒有GetaPrivateString(),說明子類沒法調用私有方法。
實例中:
圖3
結論:在Main方法中new了一個BaseClass實例,對象調用沒有GetaPrivateString(),說明實例沒法調用私有方法。
----------------------------------------------------------------------------------------------------------------------------------
測試protected作用范圍:
本類中:
看圖1
結論:在BaseClass類中,在方法Test()中,可以調用方法GetaProtectedString()
子類中(一):
看圖2
結論:在AClass中,只繼承了父類,在方法Test2()中,調用父類的方法,有GetaProtectedString(),說明子類可以調用GetaProtectedString()方法。
子類中(二):
新建一個項目,並引用之前的項目,創建子類BClass並繼承父類:
圖4
結論:子類和父類不在同一個程序集內,但是子類可以調用GetaProtectedString(),說明雖然不在一個程序集內,但是依然可以調用GetaProtectedString()方法
實例中:
看圖3
結論:在Main方法中new了一個BaseClass實例,對象調用沒有GetaProtectedString(),說明實例沒法調用GetaProtectedString()方法。
-------------------------------------------------------------------------------------------------------------------------------------
測試Internal作用范圍:
通過以上圖1,圖2,圖3,可以看出來在本類中,子類中,實例中都可以調用GetaInternalString()方法。
通過圖4,可以看出來,不在同一個程序集內,不可以調用GetaInternalString()方法。
新建一個項目,並引用之前的項目:
圖5
結論:在新實例的方法中,new了一個BaseClass實例,對象調用沒有GetaInternalString(),說明實例沒法調用GetaInternalString()方法。
------------------------------------------------------------------------------------------------------------------------------------
測試protected Internal作用范圍:
通過以上圖1,圖2,圖3,可以看出來在本類中,子類中,實例中都可以調用GetaProtectedInternalString()方法。
通過圖4,可以看出來,不在同一個程序集內,可以調用GetaProtectedInternalString()方法。
通過圖5,可以看出來,不在同一個程序集內,new了一個BaseClass實例,對象調用沒有GetaProtectedInternalString(),說明實例沒法調用GetaProtectedInternalString()方法。
-----------------------------------------------------------------------------------------------------------------------------------
測試public作用范圍:
通過以上圖例,所有情況都可以調用GetaPublicString()方法。