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結束。二 委託的原型定...