C# 构造函数

2021-08-03 16:15 更新

C#构造函数

实例构造函数

构造函数在类或结构体上运行初始化代码。

构造函数被定义为一个方法。

构造函数具有与类型相同的名称,并且没有返回类型:


public class Person {
   string name; // Define field
   public Person (string n){ // Define constructor
      name = n;              // Initialization code
   } 
} 
...
Person p = new Person ("CSS"); // Call constructor 

实例构造函数允许以下修饰符:

项目修饰符
访问修饰符public internal private protected
非托管代码修饰符unsafe extern

重载构造函数

类或结构可能重载构造函数。

为了避免代码重复,一个构造函数可以使用this关键字调用另一个构造函数:


using System; 

public class Product {
   public decimal Price;
   public int Year;
   
   public Product (decimal price) { 
      Price = price; 
   }
   public Product (decimal price, int year) : this (price) { 
     Year = year; 
   } 
} 

当一个构造函数调用另一个时,被调用的构造函数首先执行。

我们可以将表达式传递给另一个构造函数,如下所示:


public Product (decimal price, DateTime year) : this (price, year.Year) { 
} 

表达式本身不能使用这个引用。


隐式无参构造函数

对于类,当且仅当我们没有定义任何构造函数时,C#编译器自动生成一个无参数的公共构造函数。

对于结构体,无参数构造函数是struct的固有的;因此,我们不能定义我们自己的无参数构造函数。

构造函数和字段初始化顺序

我们之前看到字段可以在它们的声明中用默认值初始化:


class Sprite {
   int shields = 50; // Initialized first
   int health = 100; // Initialized second 
} 

字段初始化发生在执行构造函数之前,并且在字段的声明顺序中。

非公共构造函数

构造函数不需要公开。

有一个非公共构造函数的常见原因是通过静态方法调用来控制实例创建。


public class Class1 { 
    Class1() {} // Private constructor 
    
    public static Class1 Create (...) {
       // call Class1 constructor here
    } 
} 

静态构造函数

静态构造函数对每个类型执行一次,而不是每个实例执行一次。

类型只能定义一个静态构造函数,它必须是无参数的,并且具有与类型相同的名称:


class Main {
    static Main () { 
       Console.WriteLine ("Type Initialized"); 
    } 
} 

运行时在所使用的类型之前自动调用静态构造函数。

有两件事情触发了:

  • 实例化类型
  • 访问类型中的静态成员

静态构造函数允许的唯一修饰符是unsafe和extern。

静态字段初始化器在调用静态构造函数之前运行。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号