.NET/C#中的结构中的静态成员及静态构造函数
时间:2010-10-05 来源:szh114
在.NET/C#中的结构这一数据类型中,
可以定义全局静态的成员变量,然后直接用结构名来引用,这一点跟类的用法并无差别,
但是在使用静态构造函数时要注意一个问题,以如下的代码为例:
1 using System;实际的输出并不是:
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace TestProjectR
7 {
8 struct S1
9 {
10 public int i;
11 static S1()
12 {
13 Console.WriteLine("TEST!!!");
14 }
15 }
16
17 class Program
18 {
19 static void Main(string[] args)
20 {
21 S1 s = new S1();
22 s.i = 10;
23 Console.WriteLine(s.i);
24 }
25 }
26 }
TEST!!!
10
而是只有输出第二行,10,因为静态构造函数根本没有被调用。。。。。。
我想可能是因为结构中既没有静态成员变量,静态构造函数也没相关操作,所以没有被执行,因此改变示例如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace TestProjectR
7 {
8 struct S1
9 {
10 public static int a;
11 public int i;
12 static S1()
13 {
14 a = 5;
15 Console.WriteLine("TEST!!!");
16 }
17 }
18
19 class Program
20 {
21 static void Main(string[] args)
22 {
23 S1 s = new S1();
24 s.i = 10;
25 Console.WriteLine(s.i);
26 }
27 }
28 }
结果输出仍然只有10,静态构造函数仍然没有被调用。
好,那可能是因为没有使用这个静态成员变量,因此静态构造函数没被调用,于是再次修改示例代码如下:
1 using System;OK,这次按预想的输出了:
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace TestProjectR
7 {
8 struct S1
9 {
10 public static int a;
11 public int i;
12 static S1()
13 {
14 a = 5;
15 Console.WriteLine("TEST!!!");
16 }
17 }
18
19 class Program
20 {
21 static void Main(string[] args)
22 {
23 S1 s = new S1();
24 s.i = 10;
25 Console.WriteLine(s.i);
26 Console.WriteLine(S1.a);
27 }
28 }
29 }
30
与类相比,类就不一样,类只要新建一个对象,其静态构造函数就一定会被调用,而不管里面有没有操作静态成员变量,有没有使用到。
相关阅读 更多 +