首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匿名函数委托利润

匿名函数委托利润
EN

Stack Overflow用户
提问于 2013-02-20 22:00:07
回答 8查看 573关注 0票数 2

我有一个按钮事件,声明如下:

代码语言:javascript
复制
myButton.Click += new EventHandler(ButtonClicked);

private void ButtonClicked(Object s, EventArgs e)
{
  this.Close();
}

我可以像这样做:

代码语言:javascript
复制
myButton.Click += (s, e) => this.Close();

我确信使用第二种方法的好处不仅仅是美观。

为什么以及什么时候我应该使用第二种方法,因为我现在很困惑?如果只是为了它的外观,当你的匿名函数体中有多条指令时,它看起来并不干净。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-02-20 22:16:55

从技术上讲没有区别。编译器将在第二种情况下生成处理程序方法。

但坦率地说,我几乎从不使用匿名事件处理程序。为什么?因为他们没有名字。IDE无法帮助我找到处理事件的位置。你还记得你用匿名方法订阅的确切位置吗?你可能还记得那个地方。但我打赌你的队友不会。

我也不喜欢混用不同风格的事件处理程序。Visual Studio为我生成button1_Click方法。我不喜欢一些处理程序以这种方式订阅,而另一些则订阅到位。

我喜欢看到事件参数类型。是的,取消订阅有时也很重要。还有一些要点-匿名方法对于非常简单的逻辑很有用(比如在你的例子中关闭表单),但它们在处理更复杂的事情时会变得非常混乱。我认为将事件处理程序放在适当的位置可以打破你的方法的单一责任。它订阅事件,做一些其他的事情,并在同一个地方处理事件。我喜欢分离事物,以使它们更具可读性和可维护性。

票数 4
EN

Stack Overflow用户

发布于 2013-02-20 22:02:45

编译器为这个匿名函数(s, e) => this.Close();生成一个方法,

它取决于你想在哪里使用它,但是在一个方法中声明它将允许你访问在该方法中声明的变量。

票数 2
EN

Stack Overflow用户

发布于 2013-02-20 22:04:51

实际上,您已经隐式地向Click事件应用了一个委托。

您不能在其他任何地方的代码中访问此事件。这样做的主要好处是,您不能在类中的任何其他地方调用您的方法,因为您正在邀请其他“团队成员”在他们的代码中访问该方法,或者潜在地将该方法的修饰符更改为他们认为应该发生的事情。

如果你想要override一个方法,那么内联匿名赋值显然是一个缺点。

使用情况或多或少取决于您希望如何处理对逻辑的访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14981698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档