Unity C#委托事件结合类继承使用时触发运行时报错问题求解
问题原因
你在调用sendSave事件时,该事件没有任何订阅者,值为null,直接调用就会触发空引用异常。
修复方案
1. 事件触发前增加判空逻辑
修改Base类中的MailingSave方法,调用事件前先判断是否有订阅者:
public void MailingSave(string name) { _saveName = name; // 空条件运算符写法,C# 6及以上版本支持 sendSave?.Invoke(_saveName); // 旧版本C#兼容写法 // if (sendSave != null) // { // sendSave(_saveName); // } }
2. 排查订阅失效的场景
如果预期已经完成订阅但还是触发报错,可以检查以下配置:
- 确认
Receiving组件Inspector面板中的_base字段已经绑定了场景中对应的Base/Button组件,未赋值的话_base本身为null,订阅逻辑不会生效 - 确认事件触发的时机晚于订阅执行时机:如果
Base类在Awake/OnEnable阶段就调用了MailingSave,此时Receiving的Start方法还未执行,还没完成事件订阅,可以把订阅逻辑移到Receiving的Awake方法,或者延后事件触发的时机。
内容的提问来源于stack exchange,提问作者VladShpilMan
相关产品推荐
相关产品推荐

