面向對象的三大特性:封裝、繼承、多態。
1.封裝概念
封裝:每個對象都包含有它能進行操作的所有信息,這個特性稱為封裝。這樣的方法包含在類中,通過類的實例來實現。
2.封裝的優點
A.良好的封裝能夠減少耦合(比如實現界面和邏輯分離)
B.可以讓類對外接口不變,內部可以實現自由的修改
C.類具有清晰的對外接口,使用者只需調用,無需關心內部
D.因為封裝的類功能相對獨立,因此能更好的實現代碼復用
E.可保護代碼不被無意中破壞,通過私有字段等實現內部。注意:這里的代碼保護不是指代碼本身的加密,而是對不想外部更改的代碼通過私有實現。
封裝實例:我們單位養了一只價值800塊錢,黃色的的牧羊犬,有陌生人來的時候,就會叫幾聲,當然越是陌生程度越高,叫的次數越多。對這樣一個事務的處理上,可以利用面向對象的封裝特性,代碼實現如下:
1 /// <summary>
2 /// 狗狗類
3 /// </summary>
4 class Dog
5 {
6 string _dogName;
7 readonly Color _dogColor=Color.Yellow;
8 readonly double _dogPrice = 800.00;
9 int _shoutNumber;
10
11 /// <summary>
12 /// 構造函數
13 /// </summary>
14 /// <param name="dogName"></param>
15 public Dog(string dogName)
16 {
17 DogName = dogName;
18 }
19
20 /// <summary>
21 /// 狗狗名字 公有屬性
22 /// </summary>
23 public string DogName
24 {
25 get { return _dogName; }
26 set { _dogName = value; }
27 }
28 /// <summary>
29 /// 狗狗顏色 只讀屬性 (顏色一出生就是這個顏色,這里只提供只讀,當然這里不考慮染色)
30 /// </summary>
31 public Color DogColor
32 {
33 get { return _dogColor;}
34 }
35 /// <summary>
36 /// 狗狗價格 只讀屬性 (這是買來的價格,歷史是不可以修改的)
37 /// </summary>
38 public double DogPrice
39 {
40 get { return _dogPrice; }
41 }
42
43 /// <summary>
44 /// 狗叫的次數 (不同的陌生人來,叫的次數不同)
45 /// </summary>
46 public int ShoutNumber{
47 set{_shoutNumber=value;}
48 get { return _shoutNumber; }
49 }
50
51 /// <summary>
52 /// 狗叫的方法
53 /// </summary>
54 public void Shout()
55 {
56 int i=0;
57 string ShoutNum="";
58 do
59 {
60 ShoutNum += "旺!";
61 i++;
62 } while (i <= ShoutNumber);
63 MessageBox.Show(ShoutNum);
64 }
65 }
上面的Dog類就是對狗狗的全部信息,包括它的價格,顏色,叫聲,名字等封裝成一個類,以方便外部調用。對狗狗的價格和顏色使用了只讀屬性,因為它買來的歷史價格和顏色是不可以更改的(染毛暫不考慮)。通過封裝的思想我們可以增加狗狗體重等其它公有屬性,而不會影響到外部接口的調用,對私有的只讀屬性做到了保護。
相信通過這兩個實例,已經完全對封裝熟悉了。假如我們的狗狗又生了一個寶寶,他的很多特征都基本相同,我們是不是又要復制一次這個類呢?這就要用到面向對象的另一個重要特性——繼承,下面會慢慢介紹。
歸納一下封裝的要點
要點:
1.封裝,就是把一個對象所能操作的所有信息放在一起
2.封裝能減少耦合,保持統一的對外接口,內部修改不影響外部調用

