C 委託與事件詳解 三

2021-08-30 08:56:03 字數 2154 閱讀 4145

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();

}}請輸入要發行的雜誌:海賊王

幼稚,這麼大了,還看《火影忍者》,sb小明!

這個我定的《海賊王》,哇哈哈!

通過例子我再做一次說明,其實我們不用把sender,e想的過於可怕

一、委託宣告原型中的object型別的引數代表了subject,也就是監視物件,在本例中是 publisher(出版社)。。 

二、eventargs 物件包含了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

}請輸入您要取款的金額:888888

交易成功,請取磁卡。

向使用者郵箱[email protected]傳送郵件:您在2017/12/07 10:52:27 星期四取款金額為888888

向使用者手機12345678888傳送簡訊:您在2017/12/07 10:52:27 星期四取款金額為888888

C 事件與委託詳解

delegate delegate是c 中的一種型別,它實際上是乙個能夠持有對某個方法的引用的類。與其它的類不同,delegate類能夠擁有乙個簽名 signature 並且它只能持有與它的簽名相匹配的方法的引用。它所實現的功能與c c 中的函式指標十分相似。它允許你傳遞乙個類a的方法m給另乙個類b...

委託和事件 三 事件詳解

談到事件,不得不牽扯到兩個角色 事件發行者 publisher 乙個事件的發行者,也稱作是傳送者 sender 其實就是個物件,這個物件會自行維護本身的狀態資訊,當本身狀態資訊變動時,便觸發乙個事件,並通知說有的事件訂閱者。事件訂閱者 subscriber 對事件感興趣的物件,也稱為receiver...

C 委託與事件講解 三

protected void btnsearch click object sender,imageclickeventargs e 那他們到底表示什麼呢?在回答上面的問題之前,我們先搞懂 net framework的編碼規範 一 委託型別的名稱都應該以eventhandler結束。二 委託的原型定...