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

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

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

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

 
 
 
  1. using System;  
  2. class Test   
  3. ...{   
  4. static void Main() ...{  
  5.  Console.WriteLine("{0} {1}", B.Y, A.X);  
  6. }  
  7. public static int F(string s) ...{  
  8.  Console.WriteLine(s);  
  9.  return 1;  
  10. }  
  11. }  
  12. class A  
  13. ...{  
  14. public static int X = Test.F("Init A");  
  15. }  
  16. class B  
  17. ...{  
  18. public static int Y = Test.F("Init B");  

或者产生如下输出:

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

或者产生如下输出:

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

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

 
 
 
  1. using System;  
  2. class Test  
  3. ...{  
  4. static void Main() ...{  
  5.  Console.WriteLine("{0} {1}", B.Y, A.X);  
  6. }  
  7. public static int F(string s) ...{  
  8.  Console.WriteLine(s);  
  9.  return 1;  
  10. }  
  11. }  
  12. class A  
  13. ...{  
  14. static A() ...{}  
  15. public static int X = Test.F("Init A");  
  16. }  
  17. class B  
  18. ...{  
  19. static B() ...{}  
  20. public static int Y = Test.F("Init B");  

所产生的输出必然是:

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

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

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

分享标题:C#静态变量初始化实例详解
文章起源:http://www.shufengxianlan.com/qtweb/news29/465679.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联