C#中的静态构造器

       在C#中有静态构造器,它的作用就是在类被加载的时候用来进行一些静态初始化工作。它不能有参数,不能有修饰

符 (永远是private),也不能被调用。只是在类加载的时候被CLR调用。而在JAVA中有静态语句块,它也是用来进行一

些静态初始化工作。觉得这两种进制所达到的目的应该是一样的。至于C#中的静态构造器还有以下特性:

1   C#中对静态成员的初始化一定是在执行静态构造器以前执行的。(注意:JAVA中静态代码的执行和静态成员的初始

化顺序依赖于书写的顺序)特别值得注意的是如果要对静态成员初始化,但是没有显示的声明一个静态构造子的话,那

么编译器会自动帮我们生成一个静态的构造器,并且把静态初始化代码放到静态构造器的第一行。下面以代码来说明一

下。

java 代码
  1. class A {   
  2.   
  3.   static {   
  4.        
  5.         System.out.println("i am a static block");   
  6.     }   
  7.     public static int i = p();   
  8.        
  9.        
  10.     static int p(){   
  11.         System.out.println("p");   
  12.         return 1 ;   
  13.     }   
  14. }   
  15.   
  16. class Test{   
  17.   
  18.     public static void main(String [] args){   
  19.        
  20.         System.out.println(A.i);   
  21.     }   
  22. }   上面代码执行结果为:
  1. i am a static constructor
  1. p
  1. 1

 

c# 代码
  1. using System;   
  2. class A {   
  3.   
  4.    static A(){   
  5.        
  6.         Console.WriteLine("i am a static constructor");   
  7.     }   
  8.     public static int i = p();   
  9.        
  10.        
  11.     static int p(){   
  12.         Console.WriteLine("p");   
  13.         return 1 ;   
  14.     }   
  15. }   
  16.   
  17. class Test{   
  18.   
  19.     static void Main(){   
  20.        
  21.         Console.WriteLine(A.i);   
  22.     }   
  23. }   以上代码运行结果如下:
  1. p
  1. i am a static constructor
  1. 1

 

通过上面两个简短的例子就说明:虽然这两种机制所达到的目的是一样的。但是在执行顺序上有一定的不同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值