文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>.NET/C#中的结构中的静态成员及静态构造函数

.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;
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
OK,这次按预想的输出了:

 

与类相比,类就不一样,类只要新建一个对象,其静态构造函数就一定会被调用,而不管里面有没有操作静态成员变量,有没有使用到。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载