这是一个正常的实现:
public event MyDelegate MyEvent;
这是明确的实现:
private MyDelegate eventStorage
public event MyDelegate MyEvent
{
add
{
eventStorage += value;
}
remove
{
eventStorage -= value;
}
}
那么,哪种实现更合适,在哪些情况下我应该使用它们?谢谢你的建议
无论如何,Normal 将简单地编译成与显式实现非常相似的东西,如果它所做的只是订阅。手动实现的好处是当有人订阅或取消订阅事件时,您有机会做某事。
MSDN 文档演示了示例 2 中的示例用法。
就我个人而言,我从不需要在日常活动中手动触发事件。因此,对于绝大多数情况,如果您认为表达相同事物所需的代码更少,则通常的方式“更合适”。
只要您想执行示例中的操作,那么不仅明确地“更适合”它,而且实际上是必需的。
只有当自动实现不适合您时,您才应该使用显式。
例如,WinForms 事件使用显式实现来减少类上的委托字段的数量(每个事件都生成一个),如果没有人订阅特定事件,这些字段是无用的,为某人的每个事件保留一个委托的字典曾经订阅过。这只是可能有用的一种情况。
您还可以在订阅/删除事件期间记录或应用安全检查。