实例构造函数
用new关键词为类创建实例对象时,自动调用该类的实例构造函数。
因此通常实例构造函数的修饰符是public。
如果没有为该类实现实例构造函数,那么 C# 将会为这个类隐式的创建一个没有参数的构造函数(无参数构造函数),这个无参的构造函数会在实例化对象时为类中的成员属性设置默认值(关于 C# 中类型的默认值大家可以查阅《数据类型》一节)。在结构体中也是如此,如果没有为结构体创建构造函数,那么 C# 将隐式的创建一个无参数的构造函数,用来将每个字段初始化为其默认值
总结:new之后调用,返回一个初始化实例对象。
静态构造函数
静态构造函数用于初始化类中的静态数据或执行仅需执行一次的特定操作。静态构造函数将在创建第一个实例或引用类中的静态成员之前自动调用。
静态构造函数有以下特性:
- 静态构造函数不使用访问权限修饰符修饰或不具有参数;
- 类或结构体中只能具有一个静态构造函数;
- 静态构造函数不能继承或重载;
- 静态构造函数不能直接调用,仅可以由公共语言运行时 (CLR) 调用;
- 用户无法控制程序中静态构造函数的执行时间;
- 在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数以初始化类;
- 静态构造函数会在实例构造函数之前运行。
总结:一个类只能有一个,且不能使用权限修饰符以及参数,且不能继承和重载,用户不能手动调用,因此无法控制运行时机。
即使我们不能控制它的运行时机,但是我们知道:在new或者访问静态属性之前执行。一定在实例构造函数之前执行。
私有构造函数
私有构造函数是一种特殊的实例构造函数,通常用在只包含静态成员的类中。
值得注意的是:如果一个类中具有一个或多个私有构造函数而没有实例构造函数的话,那么其他类(除嵌套类外)则无法创建该类的实例 。
class NLog
{
// 私有构造函数
private NLog() { }
public static double e = Math.E; //2.71828...
}
上例中定义了一个空的私有构造函数,这么做的好处就是空构造函数可阻止自动生成无参数构造函数。如果不对构造函数使用访问权限修饰符,则默认它为私有构造函数。
总结:当你想要创建一个不能实例化的类,通过直接使用类的方式使用该类,那么可以试一试私有构造函数。
关于 类的构造函数就是以上内容。可以理解为,构造函数是用来描述该类如何实例化对象的表达式。而析构函数则用来描述,实例化对象被回收时,要执行的清理工作。
析构函数
与《构造函数》类似,C# 中的析构函数(也被称作“终结器”)同样是类中的一个特殊成员函数,主要用于在垃圾回收器回收类实例时执行一些必要的清理操作。
C# 中的析构函数具有以下特点:
- 析构函数只能在类中定义,不能用于结构体;
- 一个类中只能定义一个析构函数;
- 析构函数不能继承或重载;
- 析构函数没有返回值;
- 析构函数是自动调用的,不能手动调用;
- 析构函数不能使用访问权限修饰符修饰,也不能包含参数
注意:析构函数的名称同样与类名相同,不过需要在名称的前面加上一个波浪号~
作为前缀
析构函数不能对外公开,所以我们不能在析构函数上应用任何访问权限修饰符。