C#中静态构造函数的学习
2009-02-20 22:51
405 查看
(1)用于对静态字段、只读字段等的初始化。
(2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。
(3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数
(4)静态构造函数是不可继承的,而且不能被直接调用。
(5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。
任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。
(6)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。
以下用例子代码进一步说明:
1
/**//**************************************************
2
* 静 态 构 造 函 数 练 习
3
* (1)①②③……为执行顺序
4
* (2)输出结果: static A()
5
* static B()
6
* X = 1, Y = 2
7
***************************************************/
8
using System;
9
class A
10
{
11
public static int X;
12
13
static A() //④ 执行完后返回到③
14
{
15
X = B.Y + 1;
16
Console.WriteLine("static A()");
17
}
18
}
19
20
class B
21
{
22
public static int Y = A.X + 1; //③ 调用了A的静态成员,
23
// 转到A的静态构造函数---->
24
25
static B() //② 如果带有初始值设定项的静态字段,
26
// 执行该类的静态构造函数时,
27
// 先要按照文本顺序执行那些初始值设定项。
28
// 转到初始值设定项---->
29
{
30
Console.WriteLine("static B()");
31
}
32
33
static void Main() //① 程序入口,
34
// 如果类中包含用来开始执行的 Main 方法,
35
// 该类的静态构造函数将在调用 Main 方法之前执行。
36
// 转到B的静态构造函数---->
37
{
38
Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果
39
Console.ReadLine();
40
}
41
}
(2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。
(3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数
(4)静态构造函数是不可继承的,而且不能被直接调用。
(5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。
任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。
(6)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。
以下用例子代码进一步说明:
1
/**//**************************************************
2
* 静 态 构 造 函 数 练 习
3
* (1)①②③……为执行顺序
4
* (2)输出结果: static A()
5
* static B()
6
* X = 1, Y = 2
7
***************************************************/
8
using System;
9
class A
10
{
11
public static int X;
12
13
static A() //④ 执行完后返回到③
14
{
15
X = B.Y + 1;
16
Console.WriteLine("static A()");
17
}
18
}
19
20
class B
21
{
22
public static int Y = A.X + 1; //③ 调用了A的静态成员,
23
// 转到A的静态构造函数---->
24
25
static B() //② 如果带有初始值设定项的静态字段,
26
// 执行该类的静态构造函数时,
27
// 先要按照文本顺序执行那些初始值设定项。
28
// 转到初始值设定项---->
29
{
30
Console.WriteLine("static B()");
31
}
32
33
static void Main() //① 程序入口,
34
// 如果类中包含用来开始执行的 Main 方法,
35
// 该类的静态构造函数将在调用 Main 方法之前执行。
36
// 转到B的静态构造函数---->
37
{
38
Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果
39
Console.ReadLine();
40
}
41
}
相关文章推荐
- c#学习系列之静态类,静态构造函数,静态成员,静态方法(总之各种静态)
- C#学习基本概念之构造函数之四--静态构造函数
- CLR Via C# 学习笔记(5) 静态构造函数的性能
- C#中静态构造函数的学习
- C#学习之静态成员和非静态成员,构造函数,方法,方法参数,操作符重载,事件
- C#中静态构造函数的学习
- C#中静态构造函数的学习
- C#中静态构造函数的学习
- CLR Via C# 学习笔记(5) 静态构造函数的性能
- C#中静态构造函数的学习
- CLR Via C# 学习笔记(5) 静态构造函数的性能
- C#学习基础--静态构造函数
- C#中静态构造函数学习
- c# 学习笔记 静态构造函数
- 【C#学习笔记】构造函数重载,构造函数相互调用,静态构造函数
- C# 静态成员和方法的学习小结
- C#再学习之静态变量
- [C#]C#补习——静态构造函数、静态成员和常量相关
- C#输出(静态构造函数/变量、普通构造函数/变量)
- C#语言学习--基础部分(八) --类->构造方法续,静态类,静态方法