Unity3D c#检查事件是否为null

wei*_*_yu 2 c# unity-game-engine

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

public class DelegateHandler : MonoBehaviour
{

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

    OnButtonClickDelegate tempEvent = buttonClickDelegate;
    if(tempEvent!=null)
       tempEvent();
Run Code Online (Sandbox Code Playgroud)

这是因为,在多线程程序中,我们需要在检查它是否为null和调用事件之间检查某些是否从事件中取消订阅.但Unity3D是单线程的,我们还需要这样做吗?我可以写作

     if(buttonClickDelegate!=null)
       buttonClickDelegate ();
Run Code Online (Sandbox Code Playgroud)

Pro*_*mer 6

一些线程提到我需要在检查它是否为null之前为事件分配一个变量......但是Unity3D是单线程的,我们还需要这样做吗?

没有.

您不需要在普通的Unity应用程序中执行此操作.

现在,如果您启动另一个Thread并且您想要从那个调用该事件,Thread那么您必须这样做.如果您没有创建另一个Thread,则不需要这样做.


注意Unity的回调函数,比如OnAudioFilterRead在另一个Thread中调用.如果您正在使用此功能并且想要从那里调用事件,则必须在检查事件之前为事件分配变量null.

但是我仍然需要检查null,对吗?

是的,null在调用活动之前,您应该始终检查.

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

buttonClickDelegate?.Invoke();
Run Code Online (Sandbox Code Playgroud)

这消除了null检查,但你不能这样做,但在团结,因为团结不支持C#6.