C# 我应该公开动作而不是事件吗?

C# 我应该公开动作而不是事件吗?,c#,lambda,C#,Lambda,在使用WF 4.0时,我注意到WorkflowApplication类公开的是操作属性(中止、完成等),而不是事件。 有没有具体的原因?什么时候我应该更喜欢动作属性而不是事件 谢谢你哇;我懂了;这真让我吃惊 但是,如果您想不出在这里使用属性的好理由(我也不能),那么请坚持使用events;它们避免了一系列问题(最大的问题是意外取消订阅和不适当的调用) 我能想到的唯一一件事是,他们可能需要这个来实现序列化,但我可以想出其他方法来破解这个难题。或者,在WF疯狂的“依赖属性”/“附加属性”/“路由事件

在使用WF 4.0时,我注意到WorkflowApplication类公开的是操作属性(中止、完成等),而不是事件。 有没有具体的原因?什么时候我应该更喜欢动作属性而不是事件

谢谢你

哇;我懂了;这真让我吃惊

但是,如果您想不出在这里使用属性的好理由(我也不能),那么请坚持使用
event
s;它们避免了一系列问题(最大的问题是意外取消订阅和不适当的调用)

我能想到的唯一一件事是,他们可能需要这个来实现序列化,但我可以想出其他方法来破解这个难题。或者,在WF疯狂的“依赖属性”/“附加属性”/“路由事件”世界中,常规事件可能没有意义。

编辑:以下内容不准确,请参见下文

首先,事件固有地允许多个处理程序,而
操作
属性只允许一个处理程序。是的,
Action
属性本身可以进行广播,但这不是很内聚或惯用


在这一点上,我支持Marc,我很惊讶他们使用了
动作
属性而不是标准事件。

我给WF团队的一名成员发了一封电子邮件,他友好地回答了我。
他告诉我,事件和动作几乎是等价的,但是团队对使用动作的API感觉更好。

好吧,如果使用+=/-=,委托属性的行为(在表面层面)将与事件相同。所以说它只允许一个处理器有点难。@Marc:说得好,这就是坚持使用事件的更多原因,因为一个用户可能使用
+=
,而另一个用户只使用
=
,这将有效地删除第一个。谢谢你…我想知道这是否只是因为它们可以通过Xaml轻松序列化..或者它们可以更容易地由设计师处理…@fra-re后者,winforms designer多年来一直使用常规事件进行管理。。。想必他们只是从那里提取了一些代码?