[英]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.