[英]Subscribing to events using anonymous methods
我在理解以下內容的工作方式時遇到問題(代碼下方的問題):
private delegate void MyDelegate(int i);
private event MyDelegate myEvent;
public void EventTests() {
//Option One
myEvent += One;
//Option Two
myEvent += delegate{ Two(true); };
//Option Three
myEvent += () => { Two(true); };
}
private void One(int i) { }
private void Two(bool j) { }
問題:
我可以理解為什么選項一有效,因為事件myEvent
希望將帶有int參數的委托附加到該選項。 為什么選項二有效? 它將帶有錯誤簽名的匿名方法附加到事件,不是嗎?
因此,如果選項二有效,為什么選項三不起作用? 似乎簽名需要是(int i) => { Two(true); };
(int i) => { Two(true); };
與上述的()
相反。 但是選項二在沒有正確簽名的情況下工作,那么為什么這個匿名方法會導致錯誤?
非常感謝。
選項二之所以起作用,是因為當省略參數列表時,編譯器會自動找出函數簽名是什么。 將()
添加到委托關鍵字后,就定義了一個特定的參數列表,其中沒有一個,編譯器將進行擬合。
選項三是一個lambda表達式,其中定義了錯誤的參數列表。
Microsoft的C#編程指南指出:
在一種情況下,匿名方法提供了lambda表達式中找不到的功能。 匿名方法使您可以省略參數列表。 這意味着可以將匿名方法轉換為具有各種簽名的委托。 對於lambda表達式,這是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.