【发布时间】:2026-01-06 08:20:02
【问题描述】:
我最近发现了 Actions 和匿名函数的用法,以及它们在处理任务时如何方便。我已经做了几个测试,将匿名函数传递给一个类以类似于事件。
我正在做的一个例子是......
var myForm = new MyForm();
myForm.OnCertainEvent(output => {
//interact with UI based on feedback.
}));
然后在表单本身中,我将设置一个 Action 属性,并将 Action 传递给 OnCertainEvent 方法。
我认为这种语法非常简洁,而不是声明事件、委托并将它们与+= 语法挂钩。
这是不好的做法吗?显然它不是传统的,但它有任何负面影响吗?本质上我只是提供一个回调。
【问题讨论】:
-
如果你只需要一个回调,那么是的,没关系。
-
从“可能的问题”的角度来看,这并不是一个非常糟糕的做法。最后,它转换回以任何一种方式调用委托。我能看到的唯一问题是您可能会做出一些可能的线程安全疏忽、简化或遗漏,并且它们可能会在以后对您不利。不过,可能不是。另一方面,重新发明*并以非标准方式做事通常被认为是不好的做法。如果您需要类似事件的功能,为什么不直接使用事件呢?
-
您在此处提供的是“单播”委托。也就是说,您提供了一个在发生某些事情时调用的委托(适合一个动作)。能够支持多个委托会非常有用,这些委托被称为“多播”委托。 msdn.microsoft.com/en-us/library/… 如果您可以在添加或删除委托时调用代码,那就太好了msdn.microsoft.com/en-us/library/bb882534.aspx 事件就是这样诞生的。
-
您的问题与传递匿名函数而不是连接事件毫无共同之处。您可以传递普通函数(也称为方法指针)以及使用匿名 lambda 连接事件。
标签: c# events anonymous-function