封裝是面向對象的基礎和重要思想之一,今天具體的瞭解封裝這一特性後發現其實自己已經接觸過很多關於封裝的內容了。 一、什麼是封裝。 封裝的概念:將具體的實現細節裝到一個容器中,封閉或隱藏起來(使用訪問修飾符private來實現),防止容器外部直接訪問內部的實現細節或更改內部成員,僅對外公開對應的介面來訪 ...
封裝是面向對象的基礎和重要思想之一,今天具體的瞭解封裝這一特性後發現其實自己已經接觸過很多關於封裝的內容了。
一、什麼是封裝。
封裝的概念:將具體的實現細節裝到一個容器中,封閉或隱藏起來(使用訪問修飾符private來實現),防止容器外部直接訪問內部的實現細節或更改內部成員,僅對外公開對應的介面來訪問。
二、封裝的實例。
1.封裝欄位。
class Person
{
public int age;
}
在person類中,如果要使用age欄位,那麼就必須設為public,但是這樣是不安全的,因為這樣外部可以任意訪問或修改它,並且會出現age=500,這樣的非法值。解決方案:用屬性來封裝欄位。
class Person { private int _age; public int age { get { return _age; } set { if (value > 10) { throw new Exception("error"); } else { _age = value; } } } }
將_age設為private,然後向外開放一個age的介面來設置它,這樣外部並不能訪問到_age,並且可以通過屬性限制欄位的合法性。
這樣也可以看出欄位與屬性的關係:屬性是欄位的封裝。
2、一堆代碼封裝在一個方法里。
這個很簡單,就是寫一個方法,像tostring()一樣,是.net里封裝好了的方法,我們直接用就是,而並不關心具體的實現,如果名字取得的得當,還能清楚地知道這個方法的功能。
3、方法的多個參數封裝成了一個對象。
class Program { static void Main(string[] args) { Record("小明", 18, 10086); } private static void Record(string name, int age,int phone) { Write(name, age,phone); } private static void Write(string name, int age,int phone) { } }
比如開學了,學校要用Record方法記錄同學的信息,但Record方法中又有一個Write方法要做其他事,這時候就要傳遞很多參數。解決方法:
class Program { static void Main(string[] args) { Record(new Student() { name="小明",age=18,phone=10086}); } private static void Record(Student student) { Write(student); } private static void Write(Student student) { } } class Student { public string name { get; set; } public int age { get; set; } public int phone { get; set; } }
定義一個Student類,參數傳遞只需要傳遞一個對象即可。
三、綜上,封裝的好處。
1、隔離性,安全性,被封裝後的對象(這裡的對象是泛指代碼的編程單元,一般指:程式集,命名空間,類,方法,屬性,變數等)其外部對象是無法直接訪問對象的內部實現細節,內部實現細節的的改動不會影響到外部對象的訪問原則。
2、可讀性,被封裝的對象的名稱恰當的話,可以不看具體實現的情況下,瞭解該對象的作用。