委託與事件的經典示例:
using system;
using system.collections.generic;
using system.text;
namespace delegate
}// 可以供繼承自 heater 的類重寫,以便繼承類拒絕其他物件對它的監視
protected virtual void onbolied(boliedeventargs e)
}// 燒水。
public void boilwater()}}
}// 警報器
public class alarm
- : ", heater.area, heater.type);
console.writeline("alarm: 嘀嘀嘀,水已經 度了:", e.temperature);
console.writeline();
}// 顯示器 www.2cto.com
public class display
- : ", heater.area, heater.type);
console.writeline("display:水快燒開了,當前溫度:度。", e.temperature);
console.writeline();}}
class program
}}輸出:
alarm:china xian - realfire 001:
alarm: 嘀嘀嘀,水已經 99 度了:
display:china xian - realfire 001:
display:水快燒開了,當前溫度:99度。
alarm:china xian - realfire 001:
alarm: 嘀嘀嘀,水已經 100 度了:
display:china xian - realfire 001:
display:水快燒開了,當前溫度:100度。
一開始我也不明白為什麼要使用eventargs引數,看下面
.net framework的編碼規範:
委託型別的名稱都應該以eventhandler結束。
委託的原型定義:有乙個void返回值,並接受兩個輸入引數:乙個object 型別,乙個 eventargs型別(或繼承自eventargs)。
事件的命名為 委託去掉 eventhandler之後剩餘的部分。
繼承自eventargs的型別應該以eventargs結尾。
上面這些其實不僅僅是為了編碼規範而已,這樣也使得程式有更大的靈活性。比如說,如果我們不光想獲得熱水器的溫度,還想在observer端(警報器或者顯示器)方法中獲得它的生產日期、型號、**,那麼委託和方法的宣告都會變得很麻煩,而如果我們將熱水器的引用傳給警報器的方法,就可以在方法中直接訪問熱水器了。
摘自 fly to the moon
委託二(多播委託)
委託最令人興奮的的特性之一是它支援多播委託 multicasting 簡單地說,多播委託是指允許建立方法的呼叫列表或者鍊錶的能力。當多播委託被呼叫時,列表中的方法均自動執行。這種鍊錶很容易建立 初始化乙個誒託,然後使用 或 運算子為鍊錶新增方法。在移除乙個方法時,使用 或 如果委託有返回值,則將列表...
C 委託二 委託型別
我們都應該清楚,在使用委託之前,先要定義乙個委託型別,如下所示 delegate int mydelegate int a,int b mydelegate md null 既然叫做委託型別 就說明 mydelegate 實際上是乙個類,上面的寫法只是一種簡單的縮略寫法,實際上,我們自己定義的委託,...
C 委託筆記
什麼是委託?宣告委託物件?建立委託物件?賦值委託?組合委託?為委託增加方法?從委託移除方法?呼叫委託?委託的例項?呼叫帶返回值的委託?呼叫帶引用的委託?匿名方法?lambda表示式?委託 有相同簽名和返回值型別的有序方法列表 1 方法的列表稱為呼叫列表 2 當委託被呼叫時,它呼叫列表中的每乙個方法 ...