C 委託與事件講解 三

2022-09-12 08:36:11 字數 2328 閱讀 8397

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所感興趣的資料,在本例中是雜誌。

很多事情就像看**,看的人覺得很爽,做的人未必!

「中國人的勵志和國外的勵志存在非常大的不同,中國的勵志比較鼓勵人立下大志願,臥薪嘗膽,有朝一日成富成貴。而國外的勵志比較鼓勵人勇敢面對現實生活,面對普通人的困境,雖然結果也是成富成貴,但起點不一樣,相對來說,我覺得後者在操作上更現實,而前者則需要用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個中文字不認識,舉個例子,小明委託小張去買車票。但是在我們的程式世界裡,也是這麼的簡...