.NET簡(jiǎn)談靜態(tài)事件鏈
在我們?nèi)粘i_(kāi)發(fā)過(guò)程中經(jīng)常會(huì)遇到多個(gè)類(lèi)實(shí)例之間的關(guān)聯(lián),不管是B/S還是C/S的項(xiàng)目,在對(duì)實(shí)例的使用是一樣的;只不過(guò)C/S的項(xiàng)目比較好控制,不管是UI層的對(duì)象都能很好的控制,包括繼承、重寫(xiě)等等;而在B/S里面可能不太方便。
由于B/S本身的特點(diǎn),不能暴露內(nèi)部太多的繼承關(guān)系,以免不小心破壞類(lèi)的封閉性;我這篇文章主要是討論在多個(gè)類(lèi)實(shí)例之間怎么進(jìn)行動(dòng)態(tài)關(guān)聯(lián),比如我們?cè)陂_(kāi)發(fā)Winform項(xiàng)目的時(shí)候,可能會(huì)碰到兩個(gè)或多個(gè)窗口之間協(xié)同工作的情況;本人在這種情況下采用的是靜態(tài)事件鏈的解決方案,多個(gè)實(shí)例之間不存在主次之分,有人肯定會(huì)覺(jué)得在一個(gè)類(lèi)中定義事件,在調(diào)用的類(lèi)中去實(shí)例化并訂閱相關(guān)事件;這樣解決不了多實(shí)例互操作的關(guān)系。
比如:我有五個(gè)窗口分布在主界面中,當(dāng)我點(diǎn)擊菜單欄中的一個(gè)刷新按鈕時(shí),想讓這五個(gè)窗口同時(shí)刷新,這樣一來(lái)就必須讓這五個(gè)窗口實(shí)例都訂閱來(lái)自一個(gè)地方的事件;我為什么用靜態(tài)事件,就是為了方便多實(shí)例使用。
1、
2:
3:
圖3中是靜態(tài)事件鏈類(lèi)的定義,定義一個(gè)靜態(tài)事件好一個(gè)靜態(tài)方法,注意本人在該類(lèi)中也訂閱了ClickEvent事件,就是怕沒(méi)有任何實(shí)例訂閱這個(gè)靜態(tài)事件,然后又觸發(fā)了這個(gè)事件,導(dǎo)致空地址封送失敗,也就是空引用調(diào)用;
4:
圖4是模擬窗口的一個(gè)實(shí)現(xiàn),在構(gòu)造函數(shù)中我們訂閱了靜態(tài)事件鏈中的一個(gè)ClickEvent事件;其余四個(gè)窗口都是一樣的,我就不貼圖片了;
5:
6:
7:
靜態(tài)事件鏈就講完了,通過(guò)一點(diǎn)觸發(fā)多點(diǎn)的好方法,在我們開(kāi)發(fā)過(guò)程中經(jīng)常用到。
【編輯推薦】