C#中五種訪問修飾符作用范圍 public、private、protected、internal、protected internal


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     }
View Code

測試private作用范圍:

本類中:

image

圖1

結論:在BaseClass類中,在方法Test()中,可以調用私有方法GetaPrivateString()

子類中:

image

圖2

結論:在AClass中,只繼承了父類,在方法Test2()中,調用父類的方法,沒有GetaPrivateString(),說明子類沒法調用私有方法

實例中:

image

圖3

結論:在Main方法中new了一個BaseClass實例,對象調用沒有GetaPrivateString(),說明實例沒法調用私有方法

----------------------------------------------------------------------------------------------------------------------------------

測試protected作用范圍:

本類中:

看圖1

結論:在BaseClass類中,在方法Test()中,可以調用方法GetaProtectedString()

子類中(一):

看圖2

結論:在AClass中,只繼承了父類,在方法Test2()中,調用父類的方法,有GetaProtectedString(),說明子類可以調用GetaProtectedString()方法

子類中(二):

新建一個項目,並引用之前的項目,創建子類BClass並繼承父類:

image

圖4

結論:子類和父類不在同一個程序集內,但是子類可以調用GetaProtectedString(),說明雖然不在一個程序集內,但是依然可以調用GetaProtectedString()方法


實例中:

看圖3

結論:在Main方法中new了一個BaseClass實例,對象調用沒有GetaProtectedString(),說明實例沒法調用GetaProtectedString()方法

-------------------------------------------------------------------------------------------------------------------------------------

測試Internal作用范圍:

通過以上圖1,圖2,圖3,可以看出來在本類中,子類中,實例中都可以調用GetaInternalString()方法。

通過圖4,可以看出來,不在同一個程序集內,不可以調用GetaInternalString()方法。

新建一個項目,並引用之前的項目:

image

圖5

結論:在新實例的方法中,new了一個BaseClass實例,對象調用沒有GetaInternalString(),說明實例沒法調用GetaInternalString()方法

------------------------------------------------------------------------------------------------------------------------------------

測試protected  Internal作用范圍:

通過以上圖1,圖2,圖3,可以看出來在本類中,子類中,實例中都可以調用GetaProtectedInternalString()方法。

通過圖4,可以看出來,不在同一個程序集內,可以調用GetaProtectedInternalString()方法。

通過圖5,可以看出來,不在同一個程序集內,new了一個BaseClass實例,對象調用沒有GetaProtectedInternalString(),說明實例沒法調用GetaProtectedInternalString()方法

-----------------------------------------------------------------------------------------------------------------------------------

測試public作用范圍:

通過以上圖例,所有情況都可以調用GetaPublicString()方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM