单例构造函数模式
public class SingletonClass
{
public static SingletonClass Instance { get; } = new SingletonClass();
private SingletonClass()
{
// Put custom constructor code here
}
}
因为构造函数是私有的,所以不能通过使用代码来创建 SingletonClass
的新实例。访问 SingletonClass
的单个实例的唯一方法是使用静态属性 SingletonClass.Instance
。
Instance
属性由 C#编译器生成的静态构造函数指定。 .NET 运行时保证静态构造函数最多运行一次,并在首次读取 Instance
之前运行。因此,所有同步和初始化问题都由运行时执行。
请注意,如果静态构造函数失败,则 Singleton
类在 AppDomain 的生命周期中将永久不可用。
此外,静态构造函数不保证在第一次访问 Instance
时运行。相反,它会在此之前的某个时刻运行。这使得初始化发生的时间不确定。在实际情况中,JIT 经常在引用 Instance
的方法的编译 (而不是执行) 期间调用静态构造函数。这是性能优化。
有关实现单例模式的其他方法,请参阅 Singleton 实现页面。