代码改变世界

Effective C# 学习笔记(十三)对静态类成员使用合适的初始化方式

2011-07-05 22:52  小郝(Kaibo Hao)  阅读(405)  评论(0编辑  收藏  举报

首先,要知道第一次使用某个类的时候,静态构造函数会在所有的方法和变量、属性前执行。在该静态构造函数中初始化静态变量,增强了其单例的特征,并保证了类在使用前必要执行的工作已经执行了。在initializer和静态构造器中权衡的话,若在某个成员变量初始化之前你要做些相关的复杂操作则需要利用静态构造器,

如当某个单例类的初始化需要添加复杂逻辑时你可以这样做:

public class MySingleton2

{

private static readonly MySingleton2 theOneAndOnly;

static MySingleton2()

{

theOneAndOnly = new MySingleton2();

}

public static MySingleton2 TheOnly

{

get { return theOneAndOnly; }

}

private MySingleton2()

{

}

// remainder elided

}

 

但要注意:如果你的静态构造函数出现了异常而且没有被捕获处理的话,处理静态构造函数的CLR会终止你的程序运行。那些调用该类实例化的代码在应用程序域退出前都会出错。利用静态构造函数初始化静态变量,要比用initializer来初始化静态变量更有力些,因为其可以用来捕捉处理构造时的异常。