對(duì)張子陽(yáng)先生對(duì)委托和事件的兩篇文章的讀后思考(說(shuō)得很透,內(nèi)附故事一篇)
第一篇 C#中的委托和事件
第二篇 C#中的委托和事件(續(xù))
首先,張子陽(yáng)先生的這是兩篇關(guān)于委托和事件間關(guān)系的文章,是目前為止我讀過(guò)的介紹委托和事件以及異步調(diào)用最簡(jiǎn)明清晰文章,作者通過(guò)非常有節(jié)奏的“標(biāo)題”->“問(wèn)題”->“思路”->“實(shí)現(xiàn)”->“講解”的結(jié)構(gòu),分步驟一步一步地將委托和事件的實(shí)現(xiàn)、應(yīng)用與原理闡述得非常清楚,并且在行文期間將自己有趣的思考過(guò)程通過(guò)生動(dòng)的語(yǔ)言表達(dá)了出來(lái),使人讀起來(lái)越發(fā)的感興趣,以下就是我讀過(guò)這兩篇文章以后,對(duì)委托、事件、異步調(diào)用一些新的理解角度的闡述。
(推薦的張子揚(yáng)先生的文章鏈接在本文開(kāi)始處,大家完全可以先不讀我的故事,先去看那兩篇文章,真的非常好玩)
首先要引用作者文中的一個(gè)總結(jié)語(yǔ):
委托是一個(gè)類(lèi),它定義了方法的類(lèi)型,使得可以將方法當(dāng)作另一個(gè)方法的參數(shù)來(lái)進(jìn)行傳遞,這種將方法動(dòng)態(tài)地賦給參數(shù)的做法,可以避免在程序中大量使用If-Else(Switch)語(yǔ)句,同時(shí)使得程序具有更好的可擴(kuò)展性。
我覺(jué)得這句話可以從clr-via 設(shè)計(jì)的理念去闡述我的理解:
委托這個(gè)概念存在的作用就是實(shí)現(xiàn)了觀察者模式,并在封裝時(shí)用類(lèi)的命名定義了方法的類(lèi)型,代表了一類(lèi)參數(shù)列表相同的方法。
對(duì),沒(méi)錯(cuò),就是將各種不同命名的同參數(shù)列表的方法,進(jìn)行了具有可以歸類(lèi)批量處理能力的封裝,歸類(lèi)后就可以很方便的把標(biāo)注了delegate這個(gè)關(guān)鍵字的具有特定參數(shù)列表的方法標(biāo)記為一個(gè)類(lèi),并在所有做了訂閱操作(+=)的方法,放置于其編譯后所生成的代理類(lèi)中的一個(gè)List<T>中,那么在調(diào)用的時(shí)候,就可以簡(jiǎn)單地使用調(diào)用delegate的一個(gè)實(shí)例成員,來(lái)通過(guò)一次輸入代理所定義的參數(shù)列表,調(diào)用訂閱了這一委托實(shí)例的這一組同類(lèi)型方法,因?yàn)樗麄冃枰膮?shù)列表都是相同的嘛~。