2

这是一个正常的实现:

public event MyDelegate MyEvent; 

这是明确的实现:

private MyDelegate eventStorage
public event MyDelegate MyEvent
{
  add
  {
     eventStorage += value;
  }
  remove
  {
     eventStorage -= value;
  }
}

那么,哪种实现更合适,在哪些情况下我应该使用它们?谢谢你的建议

4

3 回答 3

3

这两个示例是等价的——编译器在编译第一个版本时会生成第二个版本(或类似版本)。

这只是语法糖- 使用您更熟悉的任何一个。

您可以认为这类似于编译器对自动实现的属性所做的事情,只是反过来。

于 2012-06-08T09:36:49.033 回答
2

无论如何,Normal 将简单地编译成与显式实现非常相似的东西,如果它所做的只是订阅。手动实现的好处是当有人订阅或取消订阅事件时,您有机会做某事。

MSDN 文档演示了示例 2 中的示例用法。

就我个人而言,我从不需要在日常活动中手动触发事件。因此,对于绝大多数情况,如果您认为表达相同事物所需的代码更少,则通常的方式“更合适”。

只要您想执行示例中的操作,那么不仅明确地“更适合”它,而且实际上是必需的。

于 2012-06-08T09:37:22.887 回答
2

只有当自动实现不适合您时,您才应该使用显式。

例如,WinForms 事件使用显式实现来减少类上的委托字段的数量(每个事件都生成一个),如果没有人订阅特定事件,这些字段是无用的,为某人的每个事件保留一个委托的字典曾经订阅过。这只是可能有用的一种情况。

您还可以在订阅/删除事件期间记录或应用安全检查。

于 2012-06-08T09:39:54.430 回答