C#
Programming
+
、+=
、-
、-=
,將方法加入至委派的清單中null
即可22/01/19
補充: 可以使用=
賦值運算子,使用的話跟賦值一樣會把前一個值蓋過去。這個方法目前不知道可以應用在哪裡,但可以這樣使用。
使用System.MulticastDelegate.GetInvocationList()
可以獲得委派的方法清單,下列的Code可以將ar2
的方法清單內方法印出來
Null
Check複製基本使用最後的一段code(Line: 54 ~ 55)
這個地方如果直接這樣使用會丟出例外,所以呼叫前會先進行null check
C#6之後可以有更簡潔的寫法
關於這個寫法?.
稱作Null 條件運算子
+=
和-=
來註冊或取消註冊事件。注意: 當註冊該事件的類別或物件毀滅時,請務必許消註冊事件。
例子:
Main
Object A
Object B
Object C
.NET中有定義泛型的委派類別
System.Action: 回傳值為void,可以給予0到16不等的參數值。
System.Func: 如果需要回傳值可以用Func,跟Action一樣,可以給予0到16不等的參數值,最後一個參數為回傳值的型別。
例如在上面介紹委派的例子可以這樣改寫:
System.EventHandler: 內部定義兩種EventHandler
功能:第一種的EventHandler是不帶事件資料的,第二種可以帶我們自定義的事件資料。
首先來談談參數列(args),兩種EventHandler都有名叫sender
的參數,顧名思義,該參數指的是發起事件的物件或類別。e
則是需要傳遞的事件資料。
這樣寫的意義在於統一了事件委派的規則,讓程式碼易讀且好維護。
在傳遞事件的資料時,可以創建一個class
繼承EventArgs
,這樣就可把我們想傳遞的訊息往創建的class
裏頭塞了。
問題來了,如果沒有想傳遞的事件資料呢? 這時可以使用System.EventArgs.Empty
,這樣已表示沒有需要傳遞的事件資料了。
接下來,我們依照上面給的情境題進行改寫 :
Main
Object A
Object B
Object C
ObjectAEventArgs
2019/05/01
+=
、-=
訂閱與取消訂閱事件,可以確保不能用=
把事件清單蓋過去2022/01/19