You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity3D多人游戏服务端C#继承代码为何抛出StackOverflow异常?

问题根源

你的代码存在无限递归的构造调用链,最终耗尽栈空间抛出溢出异常,完整调用流程如下:

  1. 入口Main函数执行new mainGame("JustAName"),触发mainGame类的构造函数
  2. mainGame构造函数内执行new ServerTime(null),尝试实例化ServerTime类
  3. 由于ServerTime继承自mainGame,且你显式指定了构造函数调用父类构造: base(roomName),因此实例化ServerTime前会先调用父类mainGame的构造函数
  4. 父类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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:30:04