委託筆記(二)

2021-12-29 20:59:30 字數 1411 閱讀 1809

委託與事件的經典示例:

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 當委託被呼叫時,它呼叫列表中的每乙個方法 ...