举办活动的更好方式

时间:2012-09-25 16:56:49

标签: c# events

要求是对象A订阅B的事件,其中int作为参数。我以特定的方式做到了这一点:

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

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

但在我看来,有一个更短的方法来做到这一点。有吗?

2 个答案:

答案 0 :(得分:2)

您可以使用EventHandler<T>之类的通用代理来缩短此时间:

public event EventHandler<int> BackToBaseEvent;

无效检查非常重要。

答案 1 :(得分:2)

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

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

然后你就这样做了。

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

请务必使用正确的委托和事件arg类来观察事件处理模式。

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