您的位置:首页 > 编程语言 > C#

C#中静态构造函数的一些理解

2011-03-17 13:14 211 查看
首先,先看一张结论表

If(有类显式静态构造函数)
{
If(有访问静态成员)
{
在进入Main函数之后,第一次访问静态成员之前,先调用静态构造函数,以后将不再调用静态构造函数,同一个静态构造函数最多只能调用一次。
}
Else
{
不调用该类静态构造函数
}
}
Else
{
If(有访问静态成员)
{
在执行Main函数中的代码之前,先调用静态构造函数,以后将不再调用静态构造函数,同一个静态构造函数最多只能调用一次。
}
Else
{
不调用该类静态构造函数
}
}

1.下面先来验证一下上面的结论

public class Class_1
{
public static int i;
static Class_1()   //显式定义静态构造函数
{
Console.WriteLine("Class_1:显示定义了静态构造函数");
i = 1;
}
}

public class Class_2
{
public static int i = Init(2);  //没有显式定义静态构造函数
public static int Init(int j)
{
Console.WriteLine("Class_2:没有显示定义了静态构造函数");
return j;
}
}

public class MainClass
{
static void Main()
{
//分别分析以下几种情况的结果
}
}


1. 显示定义了静态构造函数,且有访问静态成员

static void Main()
{
///1.显示定义静态构造函数 2.有访问Class_1中的静态成员i
Console.WriteLine("Start In Main:");
Console.WriteLine(Class_1.i);
}

结果如下:

Start In Main:
Class_1:显示定义了静态构造函数
1

2. 显示定义了静态构造函数,且没有访问静态成员
static void Main()
{
///1.显示定义静态构造函数 2.没有访问Class_1中的静态成员i
Console.WriteLine("Start In Main:");
}

结果如下:
Start In Main:

3. 没有显示定义了静态构造函数,且有访问静态成员
static void Main()
{
///1.没有显示定义静态构造函数 2.有访问Class_2中的静态成员i
Console.WriteLine("Start In Main:");
Console.WriteLine(Class_2.i);
}
结果如下:
Class_2:没有显示定义了静态构造函数
Start In Main:
2

4.没有显示定义静态构造函数,且没有访问静态成员
static void Main()
{
///1.没有显示定义静态构造函数 2.没有访问Class_2中的静态成员
Console.WriteLine("Start In Main:");
}
结果如下:
Start In Main:

参考资料:

  1.关于Type Initializer和 BeforeFieldInit的问题,看看大家能否给出正确的解释(/article/1308541.html)

2.通过七个关键编程技巧得益于静态内容(http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/us0501StaticsinNET.mspx?mfr=true)

3.静态构造函数的执行时机(/article/4870527.html)

4.品味细节,深入.NET的类型构造器(/article/6958168.html)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: