本課將搬出前三堂課只有略提卻沒有詳細解釋的「封裝性」
並為這段下個總結
教學影片
注意:影片有高畫質 720P 的選項,可以看得更清楚喔!
重點提示
1. 所謂的「封裝性」指的就是:「隱藏物件內部的實作細節,只留下讓外人操作的介面(方法)」
2. 封裝性的好處有二:
(1) 保護物件內部的變數
(2) 隱藏實作細節,讓別人使用只需知道使用方法即可
3. 有一種技術稱之為「緊密封裝」,意思就是「把物件內所有 Property 都設成 private,並只提供 public method 或 Get&Set 存取器來供外界操作變數」
補充
存取範圍修飾字
其實之前所教的 public 與 private 就是所謂的「存取範圍修飾字」,也就是只要加上其中一個關鍵字,就可以控制後面東西的存取範圍。而在 C# 裡面,這類的修飾字一共有五個:
public, protected, internal, protectedinternal, private。
第一個跟第五個想必大家都很清楚了,那麼其他三個又是甚麼呢?protected 與 protectedinternal 與下一段「繼承性」有關,這邊暫不作介紹。因此我們今天只討論 internal,它的定義是「存取只限於目前的組件 (assembly)」,好像有點難懂?我們來解釋一下。
不知道大家還記不記得,程式碼轉換成可以執行的檔案需要經過一個「編譯 (Compile)」的動作?而所謂的 internal,其實指的就是「在同一次編譯的所有程式碼之中,任何地方都可以存取」的意思。
假設你現在有兩個 Class, A 跟 B,然後 A 之中有個變數:
internal int number;
這個時候,如果你先把 Class A 編譯,並塞入一個程式庫(DLL 檔),然後讓 B 去使用這個程式庫。要是 Class B 這個時候想要使用 Class A 的 number 的話,就會發生錯誤!因為 A 跟 B 不是一起編譯的,這樣就不符合 internal 的要求。所以當你不會單獨把一些 class 先編譯成程式庫,或是程式規模很小的時候,internal 其實就跟 public 沒甚麼兩樣。最後要注意,有沒有想過如果你沒有加任何存取範圍修飾字的話,那麼那些變數預設會是 public 還是 private 呢?這邊要告訴你,如果是物件的 Property 的話,預設的存取範圍就是 internal 喔!
相關資訊連結
MSDN - 存取範圍層級
http://msdn.microsoft.com/zh-tw/library/ba0a1yw2%28v=vs.90%29.aspx
MSDN - internal
http://msdn.microsoft.com/zh-tw/library/7c5ka91b%28v=vs.90%29.aspx
小山您好 看了您的課程讓我受益良多
回覆刪除而近日我從書籍上也著手學習寫程式 其中遇到皆語法不懂之處想請教
KinectSensor.KinectSensors.StatusChanged += KinectSensors_StatusChanged;
(物件觸發) += 設定函數
想問此句+=的意思
你的影片提到+=在數學上為原本自己再加上+=後面的數字
但在這裡他並非提到數字故我不是很能了解
想在此詢問您
感謝
Hello
刪除我猜得沒錯的話
這裡的 += 是 C# 中一種特殊的語法,委派 (delegate)
這是一種用於控制發生事件時,通知函式來處理事件的寫法
在物件導向部分結束前都不會講到這個
建議可以先參考下方連結內的文章
http://www.dotblogs.com.tw/yc421206/archive/2009/02/16/7206.aspx