Unity3D c#检查事件是否为空

Unity3D c#检查事件是否为空,c#,unity3d,C#,Unity3d,例如,DelegateHandler就是我发送事件的地方 public class DelegateHandler : MonoBehaviour { public delegate void OnButtonClickDelegate (); public static OnButtonClickDelegate buttonClickDelegate; public void OnButtonClick() { if(buttonClic

例如,DelegateHandler就是我发送事件的地方

public class DelegateHandler : MonoBehaviour
{

     public delegate void OnButtonClickDelegate ();
     public static OnButtonClickDelegate buttonClickDelegate;

     public void OnButtonClick()
     {
     if(buttonClickDelegate!=null)
       buttonClickDelegate ();
     }

}
提到的某个线程,在检查事件是否为null之前,我需要为事件分配一个变量,如:

    OnButtonClickDelegate tempEvent = buttonClickDelegate;
    if(tempEvent!=null)
       tempEvent();
这是因为,在多线程程序中,我们需要在检查它是否为null和调用事件之间检查一些是否从事件中取消订阅。 但是Unity3D是单线程的,我们也需要这样做吗?我能写得像你一样好吗

     if(buttonClickDelegate!=null)
       buttonClickDelegate ();
前面提到的某个线程我需要为事件分配一个变量 正在检查它是否为空,如。。。 但是Unity3D是单线程的,我们也需要这样做吗

否。

在普通的Unity应用程序中不需要这样做

现在,如果您启动另一个
线程
,并且希望从该
线程
调用该事件,那么是的,您必须这样做。如果您没有创建另一个线程,则不需要这样做


请注意,Unity的回调函数(如)是在另一个线程中调用的。如果您正在使用此函数,并且希望从中调用事件,则必须先为事件分配一个变量,然后再检查它是否为
null

但我仍然需要检查空值,对吗

是的,在调用事件之前,您应该始终检查
null

在新的C#6中,你可以做到这一点

buttonClickDelegate?.Invoke();

这将删除
null
检查,但在Unity中还不能这样做,因为Unity不支持C#6。

我的第一个否是对“提到的某个线程,我需要在检查事件是否为null之前为其分配一个变量”的回答。我的第二个“是”回答是,如果你必须检查
null
,答案是“是”。为了澄清这个回答中已经提到的内容,可以在Unity中执行常规的C#线程,如果以这种方式使用多线程,那么你也需要检查null。2019年是否仍然如此?