程序开发 > C# > 正文

C#给类的静态成员初始化必须用静态构造函数

亮术网 2020-08-23 本网原创

在程序开发过程中,一些变量频繁使用需要常驻内存,即要定义为静态成员,这样有利于减少读取硬盘加快程序的执行速度。在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都不执行。