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

C#单例模式Logger类运行时生成多实例 输出异常原因求解

问题根因

你实现的单例逻辑存在核心疏漏:Instance属性的get访问器判断instance为null并创建新实例后,没有将新实例赋值给静态的instance字段,导致instance字段始终保持初始的null值,每次调用Instance属性都会触发新实例的创建。

具体执行逻辑说明

  • 首次调用Logger.Instance:静态instance字段为null,三目运算符返回新创建的Logger实例,但该实例未赋值给instance字段,instance仍然为null
  • 第二次调用Logger.Instance:instance字段依旧为null,再次创建新的Logger实例返回,因此两次拿到的是完全不同的对象,HashCode必然不一致
修复方案

只需在创建实例时同步赋值给静态instance字段即可,修复后的Instance属性代码如下:

public static Logger Instance
{
    get
    {
        // 空判断后先赋值给静态字段再返回
        if (instance == null)
        {
            instance = new Logger();
        }
        return instance;
    }
}

你也可以用C#的空合并赋值运算符简化写法:

public static Logger Instance => instance ??= new Logger();

内容的提问来源于stack exchange,提问作者nour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 06:45:01