C#中静态构造函数的一些理解
2011-03-17 13:14
211 查看
首先,先看一张结论表
If(有类显式静态构造函数)
{
If(有访问静态成员)
{
在进入Main函数之后,第一次访问静态成员之前,先调用静态构造函数,以后将不再调用静态构造函数,同一个静态构造函数最多只能调用一次。
}
Else
{
不调用该类静态构造函数
}
}
Else
{
If(有访问静态成员)
{
在执行Main函数中的代码之前,先调用静态构造函数,以后将不再调用静态构造函数,同一个静态构造函数最多只能调用一次。
}
Else
{
不调用该类静态构造函数
}
}
1.下面先来验证一下上面的结论
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)
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)
相关文章推荐
- C#中关于派生类的构造函数的一些理解
- 【C#基础知识】静态构造函数,来源于一道面试题的理解
- 【c#】面向对象简介(构造、析构函数,静态构造函数、静态类)
- 关于c#中委托与事件的一些理解
- 静态构造函数(C# 编程指南)
- 对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会 【zz】
- C# 委托 && Virtual, abstract, override && 静态构造函数
- 关于c#中的一些感念的理解。
- C# 静态构造函数(类型构造器)的要点
- 黑马程序员 构造函数的一些理解
- C# 参数传递、引用传递的一些个人理解
- C# vs C++之三:静态构造函数
- C#的静态构造函数
- [转]对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会
- c#的一些小知识点:object/string 转化为float,float保留2位小数,Replace的使用,静态方法的调用
- 谈谈对C#中反射的一些理解和认识(上)
- C# - 静态类和静态构造函数
- c# 类静态字段和静态构造函数->吃饭的你就别过来了,谨防胃溃疡
- [C#]BeforeFieldInit与类静态构造函数
- C#中的静态构造函数