在C#中有静态构造器,它的作用就是在类被加载的时候用来进行一些静态初始化工作。它不能有参数,不能有修饰
符 (永远是private),也不能被调用。只是在类加载的时候被CLR调用。而在JAVA中有静态语句块,它也是用来进行一
些静态初始化工作。觉得这两种进制所达到的目的应该是一样的。至于C#中的静态构造器还有以下特性:
1 C#中对静态成员的初始化一定是在执行静态构造器以前执行的。(注意:JAVA中静态代码的执行和静态成员的初始
化顺序依赖于书写的顺序)特别值得注意的是如果要对静态成员初始化,但是没有显示的声明一个静态构造子的话,那
么编译器会自动帮我们生成一个静态的构造器,并且把静态初始化代码放到静态构造器的第一行。下面以代码来说明一
下。
java 代码
- class A {
-
- static {
-
- System.out.println("i am a static block");
- }
- public static int i = p();
-
-
- static int p(){
- System.out.println("p");
- return 1 ;
- }
- }
-
- class Test{
-
- public static void main(String [] args){
-
- System.out.println(A.i);
- }
- } 上面代码执行结果为:
i am a static constructor
p
1
c# 代码
- using System;
- class A {
-
- static A(){
-
- Console.WriteLine("i am a static constructor");
- }
- public static int i = p();
-
-
- static int p(){
- Console.WriteLine("p");
- return 1 ;
- }
- }
-
- class Test{
-
- static void Main(){
-
- Console.WriteLine(A.i);
- }
- } 以上代码运行结果如下:
p
i am a static constructor
1
通过上面两个简短的例子就说明:虽然这两种机制所达到的目的是一样的。但是在执行顺序上有一定的不同。
分享到:
相关推荐
如果在静态构造器中抛出异常并且没有被捕获,那么将导致应用程序失败,且不会创建任何实例。 - 静态构造器执行时,线程安全是自动保证的。不同线程访问同一类的静态成员时,静态构造器只会被执行一次。 静态构造器...
通过以上步骤,我们可以利用C#静态调用Web Service,实现从客户端应用程序访问IIS上的数据库服务。这种方式简化了调用流程,减少了资源消耗,同时也提供了跨平台通信的能力。然而,实际项目中还需要考虑更多的细节,...
主要介绍了C#小知识之有趣的类型静态构造器,本文直接给分实例代码,然后分析了C#中的这一个有趣的现象,需要的朋友可以参考下
每个类可以有一个默认构造函数(无参数的构造器),也可以根据需求定义带参数的构造函数。构造方法的主要作用包括: 1. 初始化类的成员变量。 2. 执行必要的设置工作,比如资源分配。 3. 链接到其他构造函数,以实现...
在C# MVC中,我们可以通过Castle Windsor来实现在控制器中带有参数的构造函数注入。 首先,我们需要了解什么是依赖注入。依赖注入是一种设计模式,其核心思想是将依赖关系从代码中解耦出来,使得组件之间可以独立地...
在C#编程语言中,类是面向对象编程的基础,它定义了一组...同时,了解构造函数链和静态构造函数的作用,有助于我们更好地管理类的状态和资源。在实际开发中,合理运用这些构造概念,可以提高代码的可读性和可维护性。
它没有参数,不能被显式调用,当首次引用该类或首次加载类时,系统会自动调用静态构造函数。 **3. 继承与构造函数** 在继承结构中,派生类的构造函数必须显式调用基类的构造函数。这通常通过构造函数内的`base`...
C#中的构造器是用于初始化对象的特殊方法,可以分为两种:实例构造器和静态构造器。实例构造器用于初始化对象的实例,静态构造器用于初始化类的静态成员变量。 实例构造器可以有多个,例如: public Products(int ...
4. **内联初始化**:C#允许在声明静态字段时进行内联初始化,这等同于在类型构造器中进行初始化: ```csharp // 内联初始化 class SomeType { static int x = 5; } // 等同于 class SomeType { static int x; ...
在C#编程语言中,创建静态图形,如画一个小球,通常涉及到Windows Forms或WPF应用程序的图形绘制。本文将详细讲解如何利用C#来实现这个功能,包括基本的图形绘制原理、使用的类库和方法,以及代码示例。 首先,我们...
这可以通过在派生类的构造器中使用`base`关键字来实现。不这样做会导致编译错误,因为所有类都需要有一个构造器链,以确保基类的状态也被正确初始化。 5. **静态类与构造器**: 静态类不能实例化,因此它们没有...
本文实例讲述了C#中static静态变量的用法。分享给大家供大家参考。具体如下: 使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员static修饰符可用于类、字段、方法、属性、运算符、事件和构造函数,...
无参构造函数(默认构造器)通常用于设置默认值,而带参构造函数则允许在创建对象时传递初始值。例如: ```csharp public class Student { public string Name { get; set; } public int Age { get; set; } // ...
- 静态构造函数与实例构造函数并存,两者执行时机不同:静态构造函数在类加载时执行,实例构造函数在创建实例时执行,所以它们之间不会冲突。 3. 构造函数初始化器: - 当一个构造函数需要基于另一个构造函数进行...
- C#的构造函数有固定的`this`关键字,C++则没有。 - C#有自动垃圾回收机制,而C++需要手动管理内存。 4. **异常处理**: - C++使用`try-catch-finally`,C#也有相似的结构,但C#的异常是对象,可以直接捕获特定...
这部分深入探讨了C#中的面向对象编程概念和技术,包括类、对象、继承、多态等。 ##### 第九章:面向对象的程序设计 - **9.1 面向对象的基本概念** - 解释面向对象编程的核心思想,如抽象、封装、继承和多态。 - *...
在 C# 6.0 中,可以使用主构造器简化这一过程: ```csharp public class Person(string name, int age) { public string Name { get; } = name; public int Age { get; } = age; } ``` 需要注意的是,“主构造器...