[Unity/C#]MonoBehaviour多继承下的重载函数调用保障

2020/05 14 11:05
public class MonoBehaviourBase : MonoBehaviour
{
    private void OnDestroy()
    {
        // do base destroy...
    }
}

public class BattleField: MonoBehaviourBase 
{
    public void OnDestroy()
    {
        // do battle destroy
    }
}

这种写法,不会有任何警告!!!
但是在执行结果上,基于Unity-Mono体系
系统将只会执行BattleField的OnDestroy,
这样MonoBehaviourBase的OnDestroy不被调用!
会发生不可预期的行为。

改写方法为:

public class MonoBehaviourBase : MonoBehaviour
{
    private void OnDestroy()
    {
        // do base destroy...
        this.OnDestroyBase();
    }
    public virtual void OnDestroyCallback() {}
}

public class BattleField: MonoBehaviourBase 
{
    public override void OnDestroyCallback()
    {
        // do battle destroy
    }
}

若子类重写了 OnDestroy, 编译器将会警告!
除非有人恶意重写:public new void OnDestory();
达到了代码安全的目的