C#静态变量初始化实例详解

开发 后端
C#静态变量初始化的创建是在什么时候呢?C#静态变量初始化的具体是现实例是什么呢?那么本文就向你详细介绍C#静态变量初始化的具体事宜。

C#静态变量初始化是什么时候进行的呢?我们知道类的静态字段变量初始值设定项对应于一个赋值序列,这些赋值按照它们在相关的类声明中出现的文本顺序执行。

对于C#静态变量初始化,那么如果类中存在静态构造函数则静态字段初始值设定项的执行在该静态构造函数即将执行前发生。否则,静态字段初始值设定项在***次使用该类的静态字段之前先被执行,但实际执行时间依赖于具体的实现。在以下示例中:

C#静态变量初始化实例应用:

using System;  
class Test   
...{   
static void Main() ...{  
 Console.WriteLine("{0} {1}", B.Y, A.X);  
}  
public static int F(string s) ...{  
 Console.WriteLine(s);  
 return 1;  
}  
}  
class A  
...{  
public static int X = Test.F("Init A");  
}  
class B  
...{  
public static int Y = Test.F("Init B");  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

或者产生如下输出:

Init A  
Init B  
1 1 
  • 1.
  • 2.
  • 3.

或者产生如下输出:

Init B  
Init A  
1 1 
  • 1.
  • 2.
  • 3.

这是因为 X 的初始值设定项和 Y 的初始值设定项的执行顺序无法预先确定,上述两种顺序都有可能发生;***能够确定的是:它们一定会在对那些字段的引用之前发生。但是,下面的示例:

using System;  
class Test  
...{  
static void Main() ...{  
 Console.WriteLine("{0} {1}", B.Y, A.X);  
}  
public static int F(string s) ...{  
 Console.WriteLine(s);  
 return 1;  
}  
}  
class A  
...{  
static A() ...{}  
public static int X = Test.F("Init A");  
}  
class B  
...{  
static B() ...{}  
public static int Y = Test.F("Init B");  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

所产生的输出必然是:

Init B  
Init A  
1 1 
  • 1.
  • 2.
  • 3.

这是因为关于何时执行静态构造函数的规则规定:B的静态构造函数(以及B的静态字段初始值设定项)必须在A的静态构造函数和字段初始值设定项之前运行。

C#静态变量初始化的基本情况就向你介绍到这里,希望对你了解和学习C#静态变量初始化有所帮助。

【编辑推荐】

  1. C#线程优先级浅析
  2. C#语言学习阶段浅析
  3. C#读取word文档实例浅析
  4. C#读取Word文档异常处理解析
  5. C#反射静态方法开发实例详解
责任编辑:仲衡 来源: 博客园
相关推荐

2009-08-31 10:30:29

C#变量初始化

2009-08-31 10:18:00

C#静态变量定义C#静态变量

2009-09-02 16:52:55

C#数组初始化

2009-08-27 10:44:21

C#静态变量

2009-08-28 11:24:48

C#一维数组初始化

2009-08-28 11:09:35

C#数组初始化

2009-08-31 10:38:34

C#变量初始化

2009-08-31 10:00:07

C#静态变量

2009-07-31 17:51:27

C#对象初始化

2009-09-18 11:15:52

C#数组初始化

2009-08-28 12:47:30

C#静态方法应用

2009-08-27 10:31:39

C#对象初始化器

2009-09-17 16:06:22

C#数组初始化

2009-08-28 11:43:26

C#数组初始化

2009-08-31 09:41:05

C#反射静态方法开发

2009-08-26 15:28:52

C#对象集合初始化器

2009-09-17 16:17:41

C#参差数组初始化

2011-08-10 17:16:01

Objective-C静态变量

2011-06-02 14:25:45

静态变量

2010-02-01 14:21:24

C++初始化列表
点赞
收藏

51CTO技术栈公众号