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. Vb.net聲明和初始化
- 2. 初始化在聲明
- 3. c聲明和初始化
- 4. 聲明和初始化在java中
- 5. 初始化靜態final變量聲明與初始化在Application.OnCreate()
- 6. 變量初始化並聲明後可能尚未初始化
- 7. scala - 未初始化的變量聲明
- 8. C++:變量聲明初始化順序
- 9. 聲明和初始化全局變量
- 10. Java - 對象聲明和初始化
- 11. 聲明類實例及其初始化
- 12. Maya MEL變量聲明和初始化
- 13. 首選聲明/初始化方法
- 14. 無法聲明/初始化CGPoint數組
- 15. 聲明和初始化結構變量
- 16. 聲明和初始化三維數組
- 17. _mainViewController在哪裏聲明和初始化?
- 18. (函數(){})()聲明/初始化JavaScript函數
- 19. 初始化課外數組聲明
- 20. Java數組初始化後聲明
- 21. 構造函數聲明和初始化的初始化之間的區別
- 22. 在頭文件中聲明並初始化一個向量
- 23. Catch ngRepeat初始化事件
- 24. 如何聲明C#Web用戶控件但停止初始化?
- 25. PIC18變量聲明和初始化失敗硬件
- 26. 在C++中使用&&的聲明和初始化
- 27. 如何在lang中評估聲明和初始化的速記?
- 28. PLC-ST:如何初始化聲明中的結構?
- 29. 在Java中沒有初始化和用法的字段聲明
- 30. Java中的二維數組聲明和初始化
這是一個「匿名」的功能,它什麼都不做。 –
你對'delegate'關鍵詞做了哪些研究,你發現了什麼,以及它如何回答你的問題? – Servy