若是要以更复杂一些的逻辑初始化静态成员变量

时间:2022-05-13 07:15:21

在创建某个类型实例之前,就应该初始化该实例的所有静态成员变量。而C#为此供给了静态初始化器和静态结构函数。
静态结构函数是特殊的结构函数,将在其他所有要领执行之前以及变量或属性被第一次访谒之前执行。
若是简单的为某个成员分配空间,可以使用初始化器语法来替代静态结构函数。若是要以更庞大一些的逻辑初始化静态成员变量,那么可以使用静态结构函数。
单例模式是静态结构函数最常用的一个场景,,只需将实例结构函数声明为私有,然后添加初始化器即可:

public class MySingleton { private static readonly MySingleton theOneAndOnly = new MySingleton(); private MySingleton(){} public static MySingleton TheOnly { get { return theOneAndOnly; } } }

如果你还有更庞大的初始化单例的逻辑,则可以使用静态结构函数:

public class MySingleton { private static readonly MySingleton theOneAndOnly; private MySingleton(){} static MySingleton() { theOneAndOnly = new MySingleton(); //other code... } public static MySingleton TheOnly { get { return theOneAndOnly; } } }

静态结构函数对比静态初始化器对比,其长处是可以捕获异常,因为静态结构函数和静态初始化器堕落时,CLR将会终止你的措施,而可以捕获异常的静态结构函数就可以使措施继续运行,但其错误谬误也在此,静态结构函数只能初始化一次,若呈现错误造成某个类型没有初始化,那么CLR将不会再次进行初始化测验考试。