`

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#程序设计-3期(KC008) KC008110100029-什么是静态构造器.docx

    如果在静态构造器中抛出异常并且没有被捕获,那么将导致应用程序失败,且不会创建任何实例。 - 静态构造器执行时,线程安全是自动保证的。不同线程访问同一类的静态成员时,静态构造器只会被执行一次。 静态构造器...

    C#静态调用webservice

    通过以上步骤,我们可以利用C#静态调用Web Service,实现从客户端应用程序访问IIS上的数据库服务。这种方式简化了调用流程,减少了资源消耗,同时也提供了跨平台通信的能力。然而,实际项目中还需要考虑更多的细节,...

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

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

    c#面向对象静态类、构造方法、静态方法介绍.zip

    每个类可以有一个默认构造函数(无参数的构造器),也可以根据需求定义带参数的构造函数。构造方法的主要作用包括: 1. 初始化类的成员变量。 2. 执行必要的设置工作,比如资源分配。 3. 链接到其他构造函数,以实现...

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

    在C# MVC中,我们可以通过Castle Windsor来实现在控制器中带有参数的构造函数注入。 首先,我们需要了解什么是依赖注入。依赖注入是一种设计模式,其核心思想是将依赖关系从代码中解耦出来,使得组件之间可以独立地...

    C# 类的构造

    在C#编程语言中,类是面向对象编程的基础,它定义了一组...同时,了解构造函数链和静态构造函数的作用,有助于我们更好地管理类的状态和资源。在实际开发中,合理运用这些构造概念,可以提高代码的可读性和可维护性。

    C#中构造函数和析构函数的用法

    它没有参数,不能被显式调用,当首次引用该类或首次加载类时,系统会自动调用静态构造函数。 **3. 继承与构造函数** 在继承结构中,派生类的构造函数必须显式调用基类的构造函数。这通常通过构造函数内的`base`...

    C#的学习笔记总结

    C#中的构造器是用于初始化对象的特殊方法,可以分为两种:实例构造器和静态构造器。实例构造器用于初始化对象的实例,静态构造器用于初始化类的静态成员变量。 实例构造器可以有多个,例如: public Products(int ...

    c# 类型构造器

    4. **内联初始化**:C#允许在声明静态字段时进行内联初始化,这等同于在类型构造器中进行初始化: ```csharp // 内联初始化 class SomeType { static int x = 5; } // 等同于 class SomeType { static int x; ...

    用c#画静态小球(good)

    在C#编程语言中,创建静态图形,如画一个小球,通常涉及到Windows Forms或WPF应用程序的图形绘制。本文将详细讲解如何利用C#来实现这个功能,包括基本的图形绘制原理、使用的类库和方法,以及代码示例。 首先,我们...

    c# 引用类型构造器

    这可以通过在派生类的构造器中使用`base`关键字来实现。不这样做会导致编译错误,因为所有类都需要有一个构造器链,以确保基类的状态也被正确初始化。 5. **静态类与构造器**: 静态类不能实例化,因此它们没有...

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

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

    C# 2.3.1.构造方法的使用

    无参构造函数(默认构造器)通常用于设置默认值,而带参构造函数则允许在创建对象时传递初始值。例如: ```csharp public class Student { public string Name { get; set; } public int Age { get; set; } // ...

    第八章 C#构造函数.docx

    - 静态构造函数与实例构造函数并存,两者执行时机不同:静态构造函数在类加载时执行,实例构造函数在创建实例时执行,所以它们之间不会冲突。 3. 构造函数初始化器: - 当一个构造函数需要基于另一个构造函数进行...

    c++转换成c#代码

    - C#的构造函数有固定的`this`关键字,C++则没有。 - C#有自动垃圾回收机制,而C++需要手动管理内存。 4. **异常处理**: - C++使用`try-catch-finally`,C#也有相似的结构,但C#的异常是对象,可以直接捕获特定...

    C#完全中文手册

    这部分深入探讨了C#中的面向对象编程概念和技术,包括类、对象、继承、多态等。 ##### 第九章:面向对象的程序设计 - **9.1 面向对象的基本概念** - 解释面向对象编程的核心思想,如抽象、封装、继承和多态。 - *...

    C#6.0新特性

    在 C# 6.0 中,可以使用主构造器简化这一过程: ```csharp public class Person(string name, int age) { public string Name { get; } = name; public int Age { get; } = age; } ``` 需要注意的是,“主构造器...

Global site tag (gtag.js) - Google Analytics