C# 举办活动的更好方式

C# 举办活动的更好方式,c#,events,C#,Events,要求对象A订阅B的事件,该事件以int作为参数。我是以既定的方式做到这一点的: public delegate void BackToBase(int i); public event BackToBase BackToBaseEvent; ... if (this.BackToBaseEvent != null) this.BackToBaseEvent(5); 但在我看来,有一个更短的方法可以做到这一点。有吗?您可以通过使用以下通用委托稍微缩短此时间: 公共事件事件处理程序bac

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

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

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

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

您可以通过使用以下通用委托稍微缩短此时间:

公共事件事件处理程序backtoSeevent;

空检查非常重要。

您可以通过使用一个通用委托(如:

公共事件事件处理程序backtoSeevent;

空检查非常重要。

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

this.BackToBaseEvent += (s, e) => {};
然后你就这么做了

this.BackToBaseEvent(this, new MyEventArgs(5));
确保使用正确的委托和事件参数类观察事件处理模式


如果确实要检查null(以避免调用空操作的开销),请使用中所述的局部变量以避免线程问题。

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

this.BackToBaseEvent += (s, e) => {};
然后你就这么做了

this.BackToBaseEvent(this, new MyEventArgs(5));
确保使用正确的委托和事件参数类观察事件处理模式


如果您确实希望检查null(以避免调用空操作的开销),请使用中所述的局部变量以避免线程问题。

好吧,对于初学者,您可以使用
action
而不是定义自己的委托。您的标题谈到订阅事件,但你的问题看起来真的是关于举办一个活动。我同意乔恩的看法。您应该执行BackToBaseEvent+=。。。另外,在多线程代码中检查空处理程序的方式很容易出错。相反,您可以使用无操作处理程序初始化事件,或者创建扩展方法。好吧,对于初学者来说,你可以使用
操作
而不是定义你自己的委托。你的标题是关于订阅活动,但你的问题看起来是关于发起活动。我同意Jon的观点。您应该执行BackToBaseEvent+=。。。另外,在多线程代码中检查空处理程序的方式很容易出错。相反,您可以使用无操作处理程序初始化事件,或者创建扩展方法。看见