静态构造函数主要用来初始化静态变量的值. 这种函数只执行一次,在第一次创建类的对象的时候,就会自动调用它. 可以参考一下下面的代码.
using System;
class Welcome { public Welcome() { Console.WriteLine("构造函数 Welcome()"); }
static Welcome() { Console.WriteLine("构造函数 static Welcome()"); }
static void Main() { new Welcome(); new Welcome(); Console.ReadLine(); } }
执行结果: 构造函数 static Welcome() 构造函数 Welcome() 构造函数 Welcome()
又比如下面的代码
public class User { static private int count; static public int Count { get { return count; } } public User() { count++; } static User() { count = 0; } } private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 Response.Write("User Count = " + User.Count); Response.Write("<hr/>Creating User Alex."); User Alex = new User(); Response.Write("<br/>User Count = " + User.Count); Response.Write("<hr/>Creating User Rob."); User Rob = new User(); Response.Write("<br/>User Count = " + User.Count); Response.Write("<hr/>Creating User Jake."); User Jake = new User(); Response.Write("<br/>User Count = " + User.Count); }
这段代码的执行结果是: User Count = 0 ----------------------------------------------------------------------
---------- Creating User Alex. User Count = 1 ----------------------------------------------------------------------
---------- Creating User Rob. User Count = 2 ----------------------------------------------------------------------
---------- Creating User Jake. User Count = 3
如果一些操作只希望被执行一次。这时候就可以考虑使用静态构造函数。当然如果设计的面向对象一些的话,那就是使用单件模式了。
静态构造函数可以在第一次调用静态类的任何方法、属性时自动调用,所以在静态构造函数里抛出的异常捕获比较麻烦。可以参看下面的讨论: http://community.csdn.net/Expert/topic/3274/3274910.xml
静态构造函数自动被调用,不能被显式调用。虽然提供了许多约束条件,但是静态构造函数执行的确切时间和顺序是不确定的: 一个类的静态构造函数在这个类的任何实例被创建前执行。 一个类的静态构造函数在类的任何静态成员被引用前执行。 一个类的静态构造函数在它的所有派生类的静态构造函数执行之后执行。 一个类的静态构造函数从不会被执行一次以上。

|