C#的幾種訪問級別


(又水一篇,手動狗頭

C#的幾種訪問級別

Public 訪問不受到限制
Protected 允許本類以及派生類進行訪問
Internal 訪問僅限於當前程序集
Protected Internal 允許本類或派生類訪問,注意比Internal的范圍廣
Private 僅允許當前類訪問,派生類不能訪問

  其實這個寫一下代碼很容易就可以驗證。

  新建一個包含兩個Project的控制台項目。

  在TestAccess2中定義了BaseClass,代碼如下:

 1 namespace TestAccess2
 2 {
 3     public class BaseClass
 4     {
 5         public string PublicStr { get; set; }
 6 
 7         protected string ProtectedStr { get; set; }
 8 
 9         internal string InternalStr { get; set; }
10 
11         protected internal string ProtectedInternalStr { get; set; }
12 
13         private string PrivateStr { get; set; } 
14     }
15 }

  另外分別定義了BaseClass的派生類TestClass,和與BaseClass在同一程序集的另一個類TestClass2(非派生自TestClass)。

  在TestClass中可以訪問到的有:

  

  除了Private都可以訪問。在TestClass2中可以訪問的有:

  

  Private自然是不能訪問,因為TestClass2也不是繼承自BaseClass,所以Protected的也不能訪問。

  然后我們在TestAccess程序集中引用程序集TestAccess2,直接new一個BaseClass對象看看結果:

  

  只可以訪問Public的內容。

  如果我們在TestAccess新建一個類繼承自TestAccess2的BaseClass呢,訪問結果如下:

  

  注意TestProtectInternal是定義在不同的程序集中,因為繼承自BaseClass,所以反而比BaseClass本身能訪問的還要多一些。

  其實不太好理解的就是Protected 和 internal protect的,這兩個不能說誰比誰‘大’,要結合具體的場景來看。


免責聲明!

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



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