Unity3D多人游戏服务端C#继承代码为何抛出StackOverflow异常?
问题根源
你的代码存在无限递归的构造调用链,最终耗尽栈空间抛出溢出异常,完整调用流程如下:
- 入口
Main函数执行new mainGame("JustAName"),触发mainGame类的构造函数 mainGame构造函数内执行new ServerTime(null),尝试实例化ServerTime类- 由于
ServerTime继承自mainGame,且你显式指定了构造函数调用父类构造: base(roomName),因此实例化ServerTime前会先调用父类mainGame的构造函数 - 父类
mainGame构造函数又会再次执行new ServerTime(null),回到步骤2无限循环,直到栈空间被占满。
修复方案
方案1:移除不必要的继承关系(最推荐)
绝大多数场景下ServerTime属于工具类,不需要继承业务主类mainGame,直接去掉继承即可解决问题:
public class ServerTime // 去掉继承mainGame { public ServerTime(string roomName) { // 原有逻辑 } }
方案2:调整实例化时机
如果确实需要保留继承关系,就不要在mainGame的构造函数中实例化ServerTime,可以改成懒加载、外部注入,或者把实例化逻辑移到独立的初始化方法中,示例如下:
public class mainGame { private ServerTime _serverTime = null; // 用懒加载属性,首次访问时才实例化 public ServerTime serverTime { get { _serverTime ??= new ServerTime(null); return _serverTime; } } public mainGame(string a_Roomnme) { // 构造函数内不再实例化ServerTime,避免递归 } }
内容的提问来源于stack exchange,提问作者cc500
相关产品推荐
相关产品推荐

