`

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. }   上面代码执行结果为:
    i am a static constructor
    p
    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. }   以上代码运行结果如下:
    p
    i am a static constructor
    1

 

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

分享到:
评论

相关推荐

    C#小知识之有趣的类型静态构造器

    主要介绍了C#小知识之有趣的类型静态构造器,本文直接给分实例代码,然后分析了C#中的这一个有趣的现象,需要的朋友可以参考下

    C#程序设计-3期(KC008) KC008110100029-什么是静态构造器.docx

    C#程序设计-3期(KC008) KC008110100029-什么是静态构造器.docx 学习资料 复习资料 教学资源

    C#MVC实现带参数的构造注入

    C# MVC默认的实例化控制器时是调用不带参数的构造函数,但是使用castle注入进行构造注入构造函数带参。

    C#中static静态变量的用法实例

    本文实例讲述了C#中static静态变量的用法。分享给大家供大家参考。具体如下: 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,...

    c# 类型构造器

    主要作用是:设置类型中静态字段的初始化。类型构造器不一定要在类中定义,但是最多也只能有一个。例: 代码如下: class SomeType{ static SomeType(){} } jit编译器在编译... 类型构造器中只能访问类型的静态字段,一

    C#高级编程_Lambda表达式和LINQ的原理和使用

    静态字段在静态构造器初始化。 字段是与类或类的实例关联的变量。 使用 static 修饰符声明的字段定义了一个静态字段 (static field)。一个静态字段只标识一个存储位置。无论对一个类创建多少个实例,它的静态字段...

    c#进行项目设计时可以直接使用资源

    20.c#进阶构造方法(静态static) 21.c#进阶面向对象的封装性 22.c#进阶关键字readonly 23.c#进阶单例设计模式 24.c#进阶继承(构造方法不能继承) 25.c#进阶继承(构造方法) 26.c#进阶访问权限修饰符 27.c#进阶...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    5.8.3 静态构造器 175 5.8.4 静态属性 176 5.8.5 静态类 177 5.9 扩展方法 178 5.10 封装数据 179 5.10.1 const 179 5.10.2 readonly 180 5.11 嵌套类 181 5.12 分部类 183 ...

    C#_基础培训

    Part1:.NET基本概念介绍 .NET概念 .NET组成结构 .NET Framework体系结构 VisualStudio2008 集成开发环境介绍 Part2:C#的基本语法 C#2.0开发语言介绍 使用C#语言建立基本应用程序 ...对象的建立和构造器

    c# 程序设计英文课件

    类、类的构造函数、静态构造函数 引用变量的静态数据类型和动态数据类型 传值调用与传引用调用 数据转换与类型转换 一维数组、均匀数组、非均匀数组 属性、事件、索引器的定义和使用 异常对象的生成、抛出和捕捉 ...

    C#本质论(第3版)

    5.8.3 静态构造器 5.8.4 静态属性 5.8.5 静态类 5.9 扩展方法 5.10 封装数据 5.10.1 const 5.10.2 readonly 5.11 嵌套类 5.12 分部类 5.12.1 定义分部类 5.12.2 分部方法 5.13 小结 第6章 继承 6.1 ...

    C#中this方法的一些问题

    C#中this方法的一些问题,this关键字引用被访问成员所在的当前实例。静态成员函数没有this指针。this关键字可以用来从构造函数,实例方法和实例化访问器中访问成员。

    各种反调试技术原理与实例 VC版

    2. 检测调试器进程 4 3. 父进程是否是Explorer 5 4. RDTSC/ GetTickCount时间敏感程序段 7 5. StartupInfo结构 7 6. BeingDebugged 8 7. PEB.NtGlobalFlag , Heap.HeapFlags, Heap.ForceFlags 10 8. DebugPort: ...

    CLR.via.C#.(中文第3版)(自制详细书签)

    18.3 attribute的构造器和字段/属性的数据类型 18.4 检测定制attribute 18.5 两个attribute实例的相互匹配 18.6 检测定制attribute时不创建从Attribute派生的对象 18.7 条件attribute类 第19章 可空值类型 ...

    C#科学计算讲义

    本书还给出了C#程序设计的基本方法,并对科学计算中要用到的矩阵向量类的构造做了详细阐述。算法的实现本身不限于具体的语言,本书对于算法的描述是较为详细的,所以读者也很容易把算法改用Fortran、 MATLAB、C++、...

    在一小时内学会 C#(txt版本)

    4. C# 中没有全局变量或全局函数,取而代之的是通过静态函数和静态变量完成的。 数据类型 所有 C# 的类型都是从 object 类继承的。有两种数据类型: 1. 基本/内建类型 2. 用户定义类型 以下是 C# 内建类型的...

    微软C#语言规范,C#语言教程中文版

    1.6.6.3 静态方法和实例方法 17 1.6.6.4 虚方法、重写方法和抽象方法 18 1.6.6.5 方法重载 20 1.6.7 其他函数成员 21 1.6.7.1 构造函数 22 1.6.7.2 属性 23 1.6.7.3 索引器 23 1.6.7.4 事件 23 1.6.7.5 运算符 24 ...

Global site tag (gtag.js) - Google Analytics