概念:隱藏物件的屬性和實現細節,僅對外公開介面,控制在程式中屬性的讀取和修改的訪問級別。使用者不必了解具體的實現細節,而只是要通過外部介面,以特定的訪問許可權來使用類的成員。
舉個栗子~
首先我們對人這個抽象型別,進行封裝
public class person
這個時候人這個類,年齡與名稱對外是公開的,任何時候,任何地方都可以修改年齡與名字的值,並且可以修改任意值,比如此時
void start()
很明顯這個人的年齡已經為1000歲了,而且名字很長,很明顯沒有做任何限制,這個時候就可以用到屬性了,利用get,set訪問器來限制一些賦值操作
public class person
setelse}}
public string name
setelse}}
}
這個時候就可以對名字與年齡字段進行一些保護性操作了,以上是對字段的一些封裝,這個時候再和之前一樣呼叫,就會出問題了
這個時候就會顯示m_age不可訪問,具有一定的保護級別,什麼保護級別呢?那當然就是我們把m-age
的訪問修飾符改為了private私有的,只有本身可以訪問的限制了
那麼這個時候如果要訪問age怎麼整呢,沒錯,這個時候,就可以使用剛剛寫到的訪問器了
void start()
這個時候編譯,就沒有任何問題了,下面執行一波,試下
什麼情況??
原來是名字太長,年齡太大的原因,這個時候就可以看到外界賦值,就會有了一定的限制
那好,修改一下
void start()
執行結果
以上是對字段的一些封裝,這個時候如果有人要得到年齡*2,怎麼搞?這樣寫?
void start()
這樣寫雖然沒什麼問題,但是以後每次獲取都要*2*2,那後再有需求突然變除以2了,而且在真正開發過程中,可能需要大量的計算,這個時候每個用到的地方都寫一遍,顯然是不現實的,這個時候,就可以把一些自己的功能封裝成函式,對外開放了
public class person
setelse}}
public string name
setelse}}
//獲取雙倍年齡
public int getdoubleage()
}
這個時候,呼叫就會簡單很多,以後增加或者修改功能,就不用來回到處找引用了
void start()
這個時候,又會有某些人想,人的名字是不能修改的,當這個人出生的那一刻,起了名字,就不能修改了,那這也不怕,這個時候可以把name的set欄位刪了,然後通過建構函式賦值名字就好了
public class person
setelse}}
public string name
}/// /// 建構函式
///
///
///
public person(int age, string name)
public int getdoubleage()
}
這個時候name沒有了set訪問器,就變成唯讀的了
呼叫:
void start()
這個時候再給周星馳改名字,就會提示name為唯讀的了,因為我們把name的set訪問器給刪除了
本文的**重複的較多,我每次貼**都會重新貼一遍,就是為了同學們能夠更清楚的看到和上次**相比修改了什麼,至於訪問修飾符本文就沒有詳細說明,有興趣的同學可以自行查閱
C 理解C 的封裝
封裝就是將資料或函式等集合在乙個個都單元中 稱之為類 被封裝的物件通常被稱為抽象資料型別。封裝的意義在於保護或者防止 資料 被我們無意中破壞。封裝既可以封裝成員變數,又可以封裝成員方法 封裝成員變數 封裝步驟 新建類 物件導向最基本的單元就是類,即.cs檔案,裡面放置c 寫建構函式 類的基本結構是建...
Unity中C 封裝特性詳解
封裝被定義為 把乙個或多個專案封閉在乙個物理的或者邏輯的包中 在物件導向程式設計方 中,封裝是為了防止對實現細節的訪問。抽象和封裝是物件導向程式設計的相關特性。抽象允許相關資訊視覺化,封裝則使開發者實現所需級別的抽象。c 封裝根據具體的需要,設定使用者的訪問許可權,並通過訪問修飾符來實現。乙個訪問修...
C 簡單封裝的理解
以人說語言為例 介面 inte ce ipeople class chinese ipeople public void kongfu 多型,因為american類中沒有 class american ipeople public void fight class program static vo...