0
A
回答
0
這裏發生了一些事情,禮貌的語言結構。讓我們來分析一下:
首先,您要創建一個公共事件:
public event EventHandler Updated;
然後,你就初始化爲 「默認處理程序」:
public event EventHandler Updated = xxx;
凡xxx
應類型EventHandler
的處理程序。以下是該簽名:
public delegate void EventHandler(object sender, EventArgs e);
任何希望訂閱該事件的人都應該符合該簽名。
對於一些奇怪的原因,對此我並不瞭解,編譯器允許你提供一個默認的實現,它不符合預期的簽名(???)(屬性初始化):
public event EventHandler Updated = delegate { };
注意沒有參數。這是簽名應該是什麼(它編譯罰款):
public event EventHandler Updated = delegate(object sender, EventArgs e){ };
,您將不得不訪問代碼中的對象。
因此,本質上,您提供了一個默認的內聯委託方法,該方法在您觸發Updated
事件時執行。這個代表當然沒有任何指示(一個空白塊)。您可以通過稍微改變它測試:
public event EventHandler Updated = delegate { Console.Writeline("It fired!"); };
如果有人知道允許這種類型參數的代表的理由,並可以增加這個答案這將是巨大的。
0
它使事件處理程序執行一個空的代碼塊。通常它會被分配爲null,但是在觸發代碼中,您需要檢查處理程序是否爲null。有人認爲這使得代碼更清潔
+0
我不同意它使代碼更清潔。檢查null非常簡單,只需調用「?」。 –
1
這創建一個新的anonymous method與一個空的身體並將其附加到事件。這是一個默認的事件處理程序,它不會做任何事情。
相關問題
- 1. c聲明和初始化
- 2. Vb.net聲明和初始化
- 3. 初始化在聲明
- 4. 聲明並初始化在頭文件
- 5. 初始化的聲明VS在構造函數初始化
- 6. 聲明和初始化在java中
- 7. 如果聲明中的數組聲明和初始化Java
- 8. 初始化靜態final變量聲明與初始化在Application.OnCreate()
- 9. 變量初始化並聲明後可能尚未初始化
- 10. scala - 未初始化的變量聲明
- 11. 聲明時的數組初始化
- 12. 字符串的聲明和初始化
- 13. 多的NSString聲明和初始化
- 14. 無法聲明/初始化CGPoint數組
- 15. 聲明/初始化和內存分配
- 16. 枚舉初始化後聲明
- 17. C結構聲明和初始化
- 18. Obj C初始化程序聲明
- 19. 聲明和初始化全局變量
- 20. Maya MEL變量聲明和初始化
- 21. (函數(){})()聲明/初始化JavaScript函數
- 22. 首選聲明/初始化方法
- 23. 聲明類實例及其初始化
- 24. 結合聲明和初始化重載`=`
- 25. _mainViewController在哪裏聲明和初始化?
- 26. 聲明和初始化結構變量
- 27. 在聲明時初始化char數組?
- 28. 分別聲明和初始化結構?
- 29. 聲明和初始化三維數組
- 30. Java初始化/對象聲明
這是一個「匿名」的功能,它什麼都不做。 –
你對'delegate'關鍵詞做了哪些研究,你發現了什麼,以及它如何回答你的問題? – Servy