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
相关产品推荐
相关产品推荐

