一.前言
单例模式,简单字面意思就是整个程序中只进行一次初始化的操作。相对于静态类,单例模式能做到延迟加载,以及类继承。
目前有6+种实现方式。本文只记录“静态构造函数下的单例模式”和“Initialization Demand Holder(IoDH)”。其他部分在文末有转载链接可以查看。
二.代码记录
2.1 静态构造函数实现单例模式
2.1.1 执行记录
这里我们直接上代码,根据结果进行记录:
字段x初始化会在构造函数前面先执行。(重点。后面单例模式里面执行代码和想象中不同,考虑是这个原因。)
public class SingletonTest
{
public static string x = EchoAndReturn("A_In type initializer");
/// <summary>
/// 当没有写静态构造函数时,框架会自动生成
/// 导致静态字段的初始化跑到了静态方法调用之前
/// 造成对象的提前初始化
/// </summary>
static SingletonTest()
{
x = "A_static";
Console.WriteLine("A_static init");
}
public SingletonTest()
{
x = "A_nonstatic";
Console.WriteLine("A_nonstatic init");
}
public static string EchoAndReturn(string s)
{
Console.WriteLine(s);
return s;
}
}
对应main函数如下:
static void Main(string[] args)
{
Console.WriteLine("Starting Main");
//Sin