C#面试题更新 2026-08-05

请用 C# 语言写出单例模式的实现,并说明其线程安全性。

编码实现风险判断技术原理C#

考察说明

考查对单例模式的理解及 C# 实现细节。

回答思路

  1. 【回答框架 1】单例模式确保一个类仅有一个实例,并提供全局访问点。C# 中常见实现包括懒汉式、饿汉式、双重检查锁和静态初始化。
  2. 【回答框架 2】懒汉式在首次访问时创建实例,需加锁保证线程安全;饿汉式在类加载时创建实例,天然线程安全但可能造成资源浪费。
  3. 【回答框架 3】双重检查锁结合懒加载和锁,先判断实例是否为空,再加锁,锁内再次判断,避免每次访问都加锁。
  4. 【回答框架 4】静态初始化利用 CLR 的静态字段初始化机制,保证线程安全且实现简单,推荐使用。
  5. 【回答框架 5】选择实现方式需考虑性能、资源占用和代码简洁性,静态初始化通常是最佳选择。
  6. 【关键点 1】静态初始化是 C# 中最简洁且线程安全的单例实现。
  7. 【关键点 2】双重检查锁需使用 volatile 关键字防止指令重排序。
  8. 【关键点 3】懒汉式不加锁则非线程安全,加锁会带来性能开销。
  9. 【易错点 1】双重检查锁中未使用 volatile 可能导致实例未完全初始化。
  10. 【易错点 2】饿汉式在类加载时创建实例,可能造成不必要的资源消耗。
  11. 【易错点 3】多线程环境下未加锁的懒汉式会产生多个实例。