静态构造函数
调用时机: 静态构造函数在创建第一个实例或者第一次访问静态成员时调用.静态构造函数的调用时机在实例构造函数之前.
基本属性:
- 不能设置访问修饰符,不带参数,不能重载和继承,类或者结构体只能有一个静态构造.
- 由CLR自动调用,不能手动调用.
- 如果没有静态构造函数,静态变量的值将是默认值(C#不同类型对应有默认值)
实现单例,利用静态构造函数
public sealed class A
{
private A()
{}
private static A instance=new A();
public static A Instance
{
get
{
return instance;
}
}
}
???饿汉
C#中静态变量的赋值时机和C++不同,他会通过自动调用静态构造函数给静态变量赋值.静态构造函数的调用时机是第一次创建该类,或者第一次访问该类的静态变量或者函数(属性)时.所以如果A类中还有一个静态方法B,访问B时就会把唯一实例创建出来,没有达到完全的Lazy_load,效率依旧不高.
利用静态构造达到真正的lazy_load
class sealed A
{
private A(){}
public static A Instace
{
get
{
return B.Instace;
}
}
class B
{
static B()
public static instance=new A();
}
}
当第一次调用A.Instance属性时,会访问B的静态变量,调用B的静态构造,创建静态唯一实例并返回.调用A的其他的静态成员也不会将实例提前创建,达到了真正调用Instance属性的时候才创建。