定义
- 构造函数:
构造函数是一种特殊的成员函数,其名称与类名相同。用于初始化对象的状态,为对象的字段赋值等操作。例如:
public class MyClass
{
public int Number { get; set; }
public MyClass(int num)
{
Number = num;
}
}
- 析构函数:
析构函数也是特殊的成员函数,名称为类名前加波浪线
~
。用于在对象被垃圾回收器回收之前执行清理操作,如释放非托管资源。例如:
public class MyClass
{
~MyClass()
{
// 清理代码
}
}
调用时机
- 构造函数:
在使用
new
关键字创建对象时被自动调用。例如:MyClass obj = new MyClass(5);
此时构造函数MyClass(int num)
被调用。
- 析构函数:
析构函数由垃圾回收器(GC)在确定对象不再被使用且准备回收对象占用的内存时调用。但无法准确预测其具体调用时间,也不能手动调用。
功能
- 构造函数:
主要功能是初始化对象的成员变量,确保对象在创建后处于一个有效的初始状态。例如为类中的属性赋值,连接数据库等初始化操作。
- 析构函数:
主要用于释放对象使用的非托管资源,如文件句柄、数据库连接等。防止资源泄漏,确保资源在对象销毁时得到正确的清理。
语法规则
- 构造函数:
- 可以有参数,通过参数可以灵活地初始化对象的不同状态。
- 可以有多个构造函数,即构造函数重载,以适应不同的初始化需求。
- 构造函数可以使用访问修饰符(如
public
、private
、protected
等),以控制构造函数的可访问性。例如private
构造函数常用于实现单例模式。
- 析构函数:
- 不能有参数,因为其调用由系统控制,不需要外部传递参数。
- 一个类只能有一个析构函数,不支持析构函数重载。
- 析构函数不能使用访问修饰符,它的访问修饰符是隐式的,并且不能被继承。