c# 事件 vs List<Func<Args>>

c# events vs List<Func<Args>>

有什么不同吗,例如在使用 C# eventList<Func<MyArgs>> 之间,功能或性能、内存较少,这是我对我将调用的事件的理解方式

obj.MyClickEvent += handler;

在列表中

obj.MyOnClickFuncs.Add(clickFunc);

现在 List<Func<Args>> 方法似乎简单多了

事件为希望订阅事件的代码提供了更严格的API:

  • 他们可以订阅
  • 他们可以退订

(理论上,底层事件概念也提供了一种“引发”机制,但 C# 事件并未实现该机制,我怀疑它实际上已经过时了——我怀疑是因为它违反了此答案中描述的隔离。)

他们无能为力。例如,这适用于您的“只公开一个列表”方法,但不适用于事件:

obj.MyOnClickFuncs.Clear();

与事件类似,订阅者无法调用其他订阅者的处理程序 - 而他们可以使用列表方法。

换句话说,事件在订阅者之间提供了更多的隔离。如果您不关心这种隔离,那么继续公开一个列表。我个人认为隔离是一件好事。关于事件,有很多我喜欢的东西,但提供的隔离不是其中之一:)