如果 (!this) { return; } 在 C# 中有意义
本文关键字:有意义 return this 如果 | 更新日期: 2023-09-27 18:37:24
我在 Unity 中编码,我发现有时即使游戏对象已被销毁,Invoke 函数也可以调用方法。这就是我添加此检查的原因,它似乎可以正常工作,但这很奇怪。
假设我有一个对象,我想在一秒钟内自我销毁。我在觉醒时添加一个调用来自我摧毁它。但是,如果游戏结束,我想立即销毁游戏对象。该对象订阅了游戏结束事件。
void Awake ()
{
Invoke ("_destroy", 1);
GameMachine.Gameover += _destroy;
}
_destroy方法是这样的:
void _destroy()
{
if (!this) {
return;
}
GameMachine.Gameover -= _destroy;
Destroy (this.gameObject);
}
我添加了如果 (!this) 检查,因为我发现调用可以到达 _destroy 方法,即使对象已经被游戏结束事件破坏。这有什么意义,有可能吗?
谢谢
据我所知,它会起作用,但是,这样做不是一个好主意。Unity 的 MonoBehavior 覆盖了 bool 运算符。因此,当您检查时
!this
您正在检查对象(以及脚本)是否存在。
作为旁注,如果要取消订阅事件,请改用 OnDisable 函数。代码示例
void OnDisable () {
GameMachine.Gameover -= _destroy;
}