繁体   English   中英

Unity3D C#检查事件是否为空

[英]Unity3D c# check if event is null

例如,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 ();

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

没有。

您无需在普通的Unity应用中执行此操作。

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


请注意,Unity的回调函数(例如OnAudioFilterRead )在另一个线程中调用。 如果使用此函数,并且要从那里调用事件,则必须在检查事件是否为null之前为其分配一个变量。

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

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

在新的C#6中,您可以执行此操作

buttonClickDelegate?.Invoke();

它删除了null检查,但由于Unity不支持C#6 ,因此您还不能在Unity中null检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM