C#给类的静态成员初始化必须用静态构造函数
在程序开发过程中,一些变量频繁使用需要常驻内存,即要定义为静态成员,这样有利于减少读取硬盘加快程序的执行速度。在C#中,如果把某一个变量定义为静态成员,而这个成员又要求在程序开始执行时初始化并且只赋值一次。要满足这个要求在构造函数中初始化比较合适,其它方法需额外处理。
现在的问题是,变量是静态成员,初始化的构造函数是否也要定义为静态构造函数。答案是肯定的,如果不把构造函数定义为静态的,则非静态构造函数在程序第一次执行时不执行。
一、C#在非静态构造函数中初始化静态成员,没有被执行
假如有一个类定义了如下静态成员和初始化静态成员的构造函数:
public class TestStatic
{
public static string webName;
public static string domain;
private TestStatic()
{
webName = "电脑技术网";
domain = "www.liangshunet.com";
}
public static void test()
{
HttpContext.Current.Response.Write("webName=" + webName + "<br />domain=" + domain);
}
}
调用:TestStatic.test();
输出:
webName=
domain=
两个静态成员都为空,说明非静态构造函数没有被执行,把构造函数的修饰符改为 public,同样不会被执行。
二、C#在静态构造函数中初始化静态成员,成功初始化
把上面的非静态构造函数修改为:
static TestStatic()
{
webName = "电脑技术网";
domain = "www.liangshunet.com";
}
调用:TestStatic.test();
输出:
webName=电脑技术网
domain=www.liangshunet.com
两个静态成员都被赋值,说明静态构造函数在程序第一次执行时成功被执行。这说明静态成员如果要求在程序第一次执行时被自动初始化,必须在静态构造函数中完成,否则构造函数不会被执行,无论用private 还是用public都不执行。