InitializeStaticClassMemberswithStaticConstructors
第13项:用静态构造函数初始化静态类成员
用静态构造函数初始化静态类成员
你知道应该在创建某个类型的任何实例之前,初始化该类型中的静态成员变量。C#允许您为此使用静态初始化器和静态构造函数。静态构造函数是一种特殊的函数,它在访问该类中定义的任何其他方法、变量或属性之前执行。在一个类可用之前,使用这个函数来初始化静态变量,强制执行单例模式,或者执行任何其他必要的工作。你不应该使用你的实例构造函数,一些特殊的私有函数,或者任何其他的idium来初始化静态变量。
在创建类型的任何实例之前,应该初始化其中的静态成员变量。# C允许使用静态初始值设定项和静态构造函数。静态构造函数是一种特殊的方法,在访问类中的任何其他方法、变量或属性之前执行。在使用类之前,使用此方法初始化静态变量、强制单例模式或执行任何其他必要的工作。你不应该使用实例构造函数,一些特殊的私有方法,或者其他任何习惯来初始化静态变量。
与实例初始化一样,您可以使用初始值设定项语法作为静态构造函数的替代方法。如果你只是需要分配一个静态成员,使用初始化器语法。当您有更复杂的逻辑来初始化静态成员变量时,创建一个静态构造函数。
与实例初始化一样,您可以将初始值设定项语法用作静态构造函数的变体。如果你需要简单地分配一个静态成员,你可以使用初始化器语法。当你有更复杂的逻辑来初始化静态成员变量时,请创建静态构造函数。
在C#中实现单例模式是静态构造函数最常见的用法。将你的实例构造函数私有,添加一个初始化器:
考试提示:在C#中实现singleton模式是静态构造函数最常使用的。
public class MySingleton
{
private static readonly MySingleton theOneAndOnly = new MySingleton();
public static MySingleton the only
{
get
{
return the oneandonly;
}
}
private MySingleton()
{
}
//余数省略
}
如果您有更复杂的逻辑来初始化Singleton,那么singleton模式也可以这样简单地编写:
考试提示:单件模式可以像这样简单地编写。万一你有更复杂的逻辑来初始化singleton:
public class my singleton
{
private static readonly my singleton theoneandonly;
static my singleton()
{
TheOneAndOnly = new my singleton();
}
public static MySingleton the only
{
get
{
return _ the oneandonly;
}
}
private MySingleton()
{
}
//余数省略
}
与实例初始值设定项一样,静态初始值设定项在调用任何静态构造函数之前被调用。是的,你的静态初始化器在基类的静态构造函数之前执行。
与实例初始值设定项一样,静态初始值设定项在任何静态构造函数被调用之前被调用。同时,静态初始化器在基类的静态构造函数之前执行。当您的类型首次加载到应用程序空,
中时,CLR会自动调用您的静态构造函数。您只能定义一个静态构造器,并且它不能带有任何参数。因为静态构造函数是由CLR调用的,所以必须小心在其中生成的异常。如果您让异常从静态构造函数中逸出,CLR将终止您的程序。异常是使用静态构造函数而不是静态初始值设定项的最常见原因。如果你使用静态初始化器,你不能自己捕捉异常。使用静态构造函数,您可以(参见第45项):
CLR自动调用静态构造函数。您可以只定义一个静态构造函数,它必须不带任何参数。因为静态构造函数是由CLR调用的,所以必须小心其中出现的异常。如果您让异常跳出静态构造函数,CLR将终止您的程序。使用静态构造函数而不是静态初始化函数的最常见原因是异常处理。如果使用静态初始化器,自己是不可能捕捉到异常的。使用静态构造函数,您可以。(见第45项)
static my singleton()
{
try
{
theoaondonly = new my singleton();
}
catch
{
//在此尝试恢复。
}
}
静态初始值设定项和静态构造函数提供了最干净、最清晰的方法来初始化类的静态成员。它们容易阅读,也容易纠正。它们被添加到语言中,以具体说明在其他语言中初始化静态成员所涉及的差异。
静态初始值设定项和静态构造函数提供了最干净、最直接的方法来初始化类的静态成员。它们易于正确读写。它们被添加到语言中,并详细描述了在其他语言中初始化静态成员所涉及的困难。
白度搜_经验知识百科全书 » InitializeStaticClassMemberswithStaticConstructors
0条评论