C#中的构造函数和析构函数(附带实例)
C# 中的构造函数是一个特殊的函数,它是在创建对象时执行的方法,构造函数具有与类相同的名称,它通常用来初始化对象的数据成员。
构造函数的特点如下:
例如,定义一个 Book 类,代码如下:
在创建 Book 类的对象时,可以直接使用如下代码:
但是,如果在定义类时,定义了含有参数的构造函数,这时如果想要使用默认构造函数,就需要进行显式定义,例如,下面的代码:

图 1 使用无参构造函数创建对象时的错误提示
上面的错误主要是由于程序中已经定义了一个有参的构造函数,这时创建对象,如果想要使用无参构造函数,就必须进行显式定义。
定义静态构造函数时,不能设置访问修饰符,因为其他 C# 代码从来不会调用它,它只在引用类之前执行一次。另外,静态构造函数不能带任何参数,而且一个类中只能有一个静态构造函数,它只能访问类的静态成员,不能访问实例成员。
例如,定义一个静态构造函数,代码如下:
【实例】静态构造函数和实例构造函数的使用。首先创建一个控制台应用程序,并在 Program 类中定义一个静态构造函数和一个实例构造函数,然后在 Main 方法中创建 3 个 Program 类的对象。代码如下:
析构函数是以类名加前缀“~”来命名的,例如,为 Program 类定义一个析构函数,代码如下:
构造函数和析构函数是类中比较特殊的两种成员函数,主要用来对对象进行初始化和释放对象资源。一般来说,对象的生命周期从构造函数开始,以析构函数结束。
构造函数的特点如下:
- 构造函数没有返回值;
- 构造函数的名称要与本类的名称相同。
C#构造函数的使用
构造函数的语法如下:public class Book { public Book() // 无参数构造方法 { } public Book(int args) // 有参数构造方法 { args = 2 + 3; } }
- public:构造函数修饰符;
- Book:构造函数的名称;
- args:构造函数的参数。
1) C#默认构造函数和有参构造函数
在定义类时,如果没有定义构造函数,编译器就会自动创建一个不带参数的默认构造函数。例如,定义一个 Book 类,代码如下:
class Book { }
在创建 Book 类的对象时,可以直接使用如下代码:
Book book = new Book();
但是,如果在定义类时,定义了含有参数的构造函数,这时如果想要使用默认构造函数,就需要进行显式定义,例如,下面的代码:
class Book { public string Name { get; set; } public Book(string name) { Name = name; } void ShowInfo() { Book book = new Book(); } }在运行时,就会出现如下图所示的错误提示:

图 1 使用无参构造函数创建对象时的错误提示
上面的错误主要是由于程序中已经定义了一个有参的构造函数,这时创建对象,如果想要使用无参构造函数,就必须进行显式定义。
2) C#静态构造函数
在 C# 中,可以为类定义静态构造函数,这种构造函数只执行一次。编写静态构造函数的主要原因是,类有一些静态字段或者属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性。定义静态构造函数时,不能设置访问修饰符,因为其他 C# 代码从来不会调用它,它只在引用类之前执行一次。另外,静态构造函数不能带任何参数,而且一个类中只能有一个静态构造函数,它只能访问类的静态成员,不能访问实例成员。
例如,定义一个静态构造函数,代码如下:
static Program() { Console.WriteLine("static"); }在类中,静态构造函数和无参数的实例构造函数是可以共存的,因为静态构造函数是在加载类时执行,而实例构造函数是在创建类的对象时执行的。
【实例】静态构造函数和实例构造函数的使用。首先创建一个控制台应用程序,并在 Program 类中定义一个静态构造函数和一个实例构造函数,然后在 Main 方法中创建 3 个 Program 类的对象。代码如下:
public class Program { static Program() // 静态构造函数 { Console.WriteLine("static"); } private Program() // 实例构造函数 { Console.WriteLine("实例构造函数"); } static void Main(string[] args) { Program p1 = new Program(); // 创建类的对象p1 Program p2 = new Program(); // 创建类的对象p2 Program p3 = new Program(); // 创建类的对象p3 Console.ReadLine(); } }程序运行结果为:
static
实例构造函数
实例构造函数
实例构造函数
C#析构函数的使用
析构函数主要用来释放对象资源,.NET Framework 类库有垃圾回收功能,当某个类的实例被认为不再有效,并符合析构条件时,.NET Framework 类库的垃圾回收功能就会调用该类的析构函数实现垃圾回收。析构函数是以类名加前缀“~”来命名的,例如,为 Program 类定义一个析构函数,代码如下:
~Program() // 析构函数 { Console.WriteLine("析构函数自动调用"); }严格地说,析构函数是自动调用的,不需要开发人员显式定义。如果需要定义析构函数,一个类中只能定义一个析构函数。
构造函数和析构函数是类中比较特殊的两种成员函数,主要用来对对象进行初始化和释放对象资源。一般来说,对象的生命周期从构造函数开始,以析构函数结束。