protected void btnsearch_click(object sender, imageclickeventargs e)
那他們到底表示什麼呢?
在回答上面的問題之前,我們先搞懂 .net framework的編碼規範:
一、委託型別的名稱都應該以eventhandler結束。
二、委託的原型定義:有乙個void返回值,並接受兩個輸入引數:乙個object 型別,乙個 eventargs型別(或繼承自eventargs)。
三、事件的命名為 委託去掉 eventhandler之後剩餘的部分。
四、繼承自eventargs的型別應該以eventargs結尾。
這就是微軟編碼的規範,當然這不僅僅是規則,而是在這種規則下使程式有更大的靈活性,那我們就繼續重構第三講的例子,讓他符合微軟的規範。
//所有訂閱者【subscriber】感興趣的物件,也就是e,都要繼承微軟的eventargs
//本例中訂閱者【也稱觀察者】mrming,mrzhang他們感興趣的e物件,就是雜誌【magazine】
public
class
pubeventargs : eventargs
public
pubeventargs (
string
magazinename)}//
發布者(publiser)
public
class
publisher}//
事件必須要在方法裡去觸發
public
void
issue(
string
magazinename)}//
subscriber 訂閱者
public
class
mrming
}public
class
mrzhang
}class
story
else
console.readkey();}}
輸入火影忍者後,觸發小明訂閱的事件
顯示
通過例子我再做一次說明,其實我們不用把sender,e想的過於可怕
一、委託宣告原型中的object型別的引數代表了subject,也就是監視物件,在本例中是 publisher(出版社)。。
二、eventargs 物件包含了observer所感興趣的資料,在本例中是雜誌。
很多事情就像看a
片,看的人覺得很爽,做的人未必!
「中國人的勵志和國外的勵志存在非常大的不同,中國的勵志比較鼓勵人立下大志願,臥薪嘗膽,有朝一日成富成貴。而國外的勵志比較鼓勵人勇敢面對現實生活,面對普通人的困境,雖然結果也是成富成貴,但起點不一樣,相對來說,我覺得後者在操作上更現實,而前者則需要用999個失敗者來堆砌乙個成功者的故事。」
好了,我們接著講我們的委託與事件,其實如果大家對設計模式精通的話,其實他們關聯的是觀察者(observer)模式,這裡我就不再描述什麼是觀察者模式了,只是簡單講一下他們的關聯:
在c#的event中,委託充當了抽象的observer介面,而提供事件的物件充當了目標物件。委託是比抽象observer介面更為松耦合的設計。
如果看不懂的話也沒關係,當大家oo達到一定程度了,自然而然就會明白。
最後我們來看乙個我們日常最最常用的觀察者模式:
場景:當我們用信用卡刷完錢的時候,我們就會接收到手機簡訊,或者是電子郵件,其實這就是observer pattern
//---本例場景為當使用者從銀行賬號裡取出錢後,馬上通知電子郵件和發手機簡訊---
//本例中的訂閱者,也就是觀察者是電子郵件與手機
//發布者,也就是被監視物件是銀行賬號
//obverser電子郵件,手機關心的物件e ,分別是郵件位址、手機號碼、取款金額
public
class
usereventargs : eventargs}//
發布者,也就是被監視的物件-銀行賬號
class
bankaccount
}public
void
prcess(usereventargs e)}//
觀察者email
class
email}//
觀察者手機
class
mobile}//
訂閱系統,實現銀行系統訂閱幾個observer,實現與客戶端的松耦合
class
subscribsystem
public
subscribsystem(bankaccount bankaccount, usereventargs e)
}class
client}
控制台
網上還有個水器燒水的observer pattern 也是蠻經典的,大家可以看看。
下一講我們要講講,在我們的日常的mes系統開發中,到底在什麼場景用到委託事件,畢竟我們學了這樣的技術,我們必須要用起來,這才有價值嘛!
呵呵!下講,將會更加精彩!
C 委託與事件講解 三
protected void btnsearch click object sender,imageclickeventargs e 那他們到底表示什麼呢?在回答上面的問題之前,我們先搞懂 net framework的編碼規範 一 委託型別的名稱都應該以eventhandler結束。二 委託的原型定...
C 委託與事件講解 二
什麼是事件?event?點選事件?載入事件?一連串的模糊的概念衝擊著我們弱小的腦袋 那我們首先來看一下比較正統的感念吧 事件是類在發生其關注的事情時用來提供通知的一種方式。事件的發生一般都牽扯2個角色 事件發行者 publisher 乙個事件的發行者,也稱作是傳送者 sender 其實就是個物件,這...
C 委託與事件講解 一
從序言中,大家應該對委託和事件的重要性有點了解了吧,雖然說我們現在還是能模糊,但是從我的大白話系列中,我會把這些概念說的通俗易懂的。首先,我們還是先說說委託吧,從字面上理解,只要是中國人應該都知道這個意思,除非委託2個中文字不認識,舉個例子,小明委託小張去買車票。但是在我們的程式世界裡,也是這麼的簡...