一、抽象和封裝是面向對象編程的基礎特性,抽象用來忽略細節,在不同的層次上處理細節,封裝則實現了對細節的不同程度的訪問許可權;即抽象允許相關信息可視化,封裝用來實現所需級別的抽象; 1.根據封裝的原則,命名空間可以指定其中每個類型對外部代碼的可訪問性,類和結構可以指定其中每個成員對外部代碼的可訪問性,可 ...
一、抽象和封裝是面向對象編程的基礎特性,抽象用來忽略細節,在不同的層次上處理細節,封裝則實現了對細節的不同程度的訪問許可權;即抽象允許相關信息可視化,封裝用來實現所需級別的抽象;
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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。