在張子陽的文章我相信已經把事件和委托講的很清楚了,下面我說說我感覺需要注意的地方。
在C++中用函數指針來實作回調函數(回調函數是一種非常有用的程式設計機制),然而函數指針不是類型安全的, 是以.net Framework提供了稱為委托的類型安全的機制來實作函數的回調。
當我們像下面一樣在代碼中定義一個委托時,
Public delegate void Comparator(int value);
但是編譯器遇到這行代碼會定義一個類:
View Code
從上面代碼可以知道 委托 也是一個類,其中有一個構造器,Invoke方法,BeginInvoke方法 和EndInvoke方法。構造器有兩個參數,對象引用傳給構造器的Object參數,方法的引用傳給method 參數,對于靜态方法,會為Object 參數傳遞null.
先看一個事件的定義:
編譯器在編譯事件的時候會把它轉換為三個構造:
從上面代碼可以看出第一部分是申明一個私有的委托字段, 後面兩部分是對這個委托字段的add通路器和remove 通路器,我們知道屬性中有get 和set 通路器,其實事件就是委托字段的通路器,隻是通路器方法用add 和remove,而屬性用get和set.
到這裡我要講的差不多說完了, 這是我第一次寫文章,盡管上面的内容了解的不是很深入,但是我隻是想通過這樣的方式來鞏固自己看到的知識,因為我覺得這樣可以記錄下我不同時段對知識的了解以及寫的時候自己也在不斷思考,這樣會有利于對知識的了解。
最後我為初學者推薦關于深入了解.net Framework幾本書, 因為我感覺很多初學者不知道買什麼書來學習。
CLR via C# (第三版) 作者:Jeffrey Richter (周靖譯) 清華大學出版社
深入了解C#(第2版)作者:Jon Skeet 周靖(譯)人民郵電出版社
現在關于C# 方面的書籍很多,是以對于一些初學者來說不知道怎麼選擇, 我推薦上面兩本書,如果認真的看完的話, 我相信你肯定對.net 會有一定的了解, 然後通過項目實踐的方式對書中内容進行鞏固。個人覺得要深入了解程式底層的東西, 有必要閱讀一些關于作業系統和編譯器相關的書籍,本人一向提倡“知其然知其是以然”的學習方式。
在此推薦一本作業系統相關的書籍: 深入了解計算機系統 (美)布萊恩特,奧哈拉倫 著 龔奕利,雷迎春 譯 機械工業出版社。
希望這篇文章對大家會有幫助。
本文轉自LearningHard 51CTO部落格,原文連結:http://blog.51cto.com/learninghard/1033992,如需轉載請自行聯系原作者