C# 使用匿名方法订阅事件
我在理解下面的工作原理时遇到问题(代码下面的问题): 问题:C# 使用匿名方法订阅事件,c#,events,delegates,anonymous-function,C#,Events,Delegates,Anonymous Function,我在理解下面的工作原理时遇到问题(代码下面的问题): 问题: 我可以理解为什么选项一起作用,因为事件myEvent需要附加一个带有int参数的委托。为什么选项二能起作用?它正在将签名不正确的匿名方法附加到事件,不是吗 那么,如果方案二可行,为什么方案三不可行呢?似乎签名需要是(inti)=>{Two(true);}而不是上面写的()。但是选项二在没有正确签名的情况下工作,那么为什么这个匿名方法会导致错误呢 非常感谢。选项二起作用,因为当省略参数列表时,编译器会自动计算出函数签名是什么。将()添加
myEvent
需要附加一个带有int参数的委托。为什么选项二能起作用?它正在将签名不正确的匿名方法附加到事件,不是吗(inti)=>{Two(true);}代码>而不是上面写的()
。但是选项二在没有正确签名的情况下工作,那么为什么这个匿名方法会导致错误呢
非常感谢。选项二起作用,因为当省略参数列表时,编译器会自动计算出函数签名是什么。将
()
添加到delegate关键字后,您已经定义了一个特定的参数列表none,编译器将抛出一个fit
选项三是定义了错误参数列表的lambda表达式
微软的声明:
有一种情况下,匿名方法提供lambda表达式中找不到的功能。匿名方法允许您省略参数列表。这意味着匿名方法可以转换为具有各种签名的委托。这在lambda表达式中是不可能的
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) { }