0

要求是对象A订阅作为参数B携带的 's 事件。int我以给定的方式做到了这一点:

public delegate void BackToBase(int i);
public event BackToBase BackToBaseEvent;

...
if (this.BackToBaseEvent != null)
    this.BackToBaseEvent(5);

但在我看来,有一种更短的方法可以做到这一点。在那儿?

4

2 回答 2

2

您可以将事件处理程序初始化为 ctor 中的空委托,然后您不需要检查,因为委托永远不会为空。例如

this.BackToBaseEvent += (s, e) => {};

然后你就做。

this.BackToBaseEvent(this, new MyEventArgs(5));

请务必遵守事件处理模式,使用正确的委托和事件 arg 类。

如果您确实想要检查 null(以避免调用空操作的开销),请使用http://msdn.microsoft.com/en-us/library/edzehd2t.aspx中所述的局部变量来避免线程问题。

于 2012-09-25T17:22:32.700 回答
2

您可以通过使用以下通用委托来稍微缩短此时间EventHandler<T>

public event EventHandler<int> BackToBaseEvent;

不过,空值检查非常重要。

于 2012-09-25T17:16:06.383 回答