C#面向對象--封裝


  一、抽象和封裝是面向對象編程的基礎特性,抽象用來忽略細節,在不同的層次上處理細節,封裝則實現了對細節的不同程度的訪問權限;即抽象允許相關信息可視化,封裝用來實現所需級別的抽象;

  1.根據封裝的原則,命名空間可以指定其中每個類型對外部代碼的可訪問性,類和結構可以指定其中每個成員對外部代碼的可訪問性,可訪問性可以控制是否可以從當前程序集或其它程序集的代碼中訪問它們,以防止編碼錯誤和惡意攻擊發生的可能性;

  二、在C#中可以通過4種訪問修飾符(Access Modifier)和2種組合訪問修飾符來設置元素的可訪問性:

  1.命名空間默認即為public,沒有任何訪問限制,不能使用任何訪問修飾符;

  2.在命名空間中的定義的五種基本類型(類class、結構struct、接口interface、枚舉enum和委托delegate),只能是public或internal的,默認為internal的;

  ※派生類的可訪問性不允許高於基類的可訪問性;

  3.在不同類型的內部聲明成員時,僅允許指定某些特定的訪問性或不允許指定任何訪問性,如果未在成員聲明中指定訪問修飾符,則將使用默認的可訪問性:

   ※特殊的,委托類型不包含任何自定義成員;靜態構造函數、析構函數不能包含任何訪問修飾符;

  ※通常情況下,成員的可訪問性不高於聲明該成員的類型的可訪問性,但是,如果內部類中的公共成員實現了接口方法或重寫了公共基類中定義的虛方法、抽象方法,則可從其它程序集內訪問到該成員;

  ※字段、屬性和事件的類型的可訪問性不得低於該成員的可訪問性,方法、索引器和委托的返回值及參數的類型的可訪問性不得低於該成員的可訪問性;這些操作會導致編譯器錯誤:

 1 class MyClass { }
 2 public class MyPublicClass
 3 {
 4     public MyClass MyField; //CS0052
 5     public void MyFunc(MyClass obj) //CS0051
 6     {
 7         //do…
 8     }
 9     public MyClass MyFunc() //CS0050
10     {
11         return new MyClass();
12     }
13 }

 


如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的認可是我寫作的最大動力!

作者:Minotauros
出處:https://www.cnblogs.com/minotauros/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


免責聲明!

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



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