话说静态构造函数
静态构造函数
静态构造函数用来初始化静态数据, 或执行一个只需要执行一次的任务。 静态构造函数会在类对象第一次实例化时,或者任何静态成员被调用时自动调用执行。
比如下面的这段代码:
class SimpleClass { // Static variable that must be initialized at run time. static readonly long baseline; // Static constructor is called at most one time, before any // instance constructor is invoked or member is accessed. static SimpleClass() { baseline = DateTime.Now.Ticks; } }
另一个例子就是我们经常用的单例模式,因为单列模式的类只有一个实例,所以通常会在实例化之前执行一些配置初始化的代码,我们可以用下面的代码来演示,
public sealed class ClassicSingleton { private static ClassicSingleton instance; private static object syncRoot = new Object(); private ClassicSingleton() { } public static ClassicSingleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) { ...custom code instance = new ClassicSingleton(); } } } return instance; } } }
这里我们必须通过lock关键字来保证在多线程环境中,类也只能有一个实例。而如果使用静态构造函数,我们可以有更简单有实现版本:
public sealed class Singleton { private static Singleton instance; private Singleton() { } static Singleton() { ...custom code instance = new Singleton(); } public static Singleton Instance { get { return instance; } } }
我们不需要使用lock来锁定创建实例的代码,也少了if语句,代码更加简洁了。