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

1.五種訪問修飾符包括哪些?ide

public、private、protected、internal、protected internal測試


2.五種訪問修飾符的做用範圍?spa

public  :公有訪問。不受任何限制。
private  : 私有訪問。只限於本類成員訪問,子類,實例都不能訪問。
protected  :保護訪問。只限於本類和子類訪問,實例不能訪問。
internal  :內部訪問。只限於本項目內訪問,其餘不能訪問。
protected internal : 內部保護訪問。只限於本項目或是子類訪問,其餘不能訪問3d


實例講解一下這五種訪問修飾符的做用範圍:code

基礎代碼:對象

  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做用範圍:blog

本類中:繼承

image

圖1get

結論:在BaseClass類中,在方法Test()中,能夠調用私有方法GetaPrivateString()string

子類中:

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()方法。

相關文章
相關標籤/搜索