构造函数是在创建给定类型的对象时执行的类方法。
构造函数具有与类相同的名称,它通常初始化新对象的数据成员。
如下面示例:
public class myclass
{
//下面为myclass类的构造函数
public myclass() //与类名相同的函数为类的构造函数
{
}
}
不带参数的构造函数称为类的“默认构造函数”。
只要使用 new 运算符实例化对象,并且不为 new 提供任何参数,就会调用默认构造函数。
除非类是 static 的,否则 C# 编译器将为无构造函数的类提供一个公共的默认构造函数,以便该类可以实例化。
通过将构造函数设置为私有构造函数,可以阻止类被实例化
如下例:
class myclass
{
//用private 关键字来声明为私有构造函数
private myclass()
{
}
}
结构类型的构造函数与类的构造函数类似,但是 structs 不能包含显式默认构造函数,因为编译器将自动提供一个构造函数。
只有当 struct 用 new 实例化时,才会调用此默认构造函数。
基于 structs 的对象(包括所有内置数值类型)可以初始化或赋值后使用。
因此对值类型调用默认构造函数不是必需的。
类和 structs 都可以定义具有参数的构造函数。带参数的构造函数必须通过 new 语句或 base 语句来调用。
类和 structs 还可以定义多个构造函数,并且二者均不需要定义默认构造函数。
构造函数可以使用 base 关键字来调用基类的构造函数。
基类的构造函数在执行构造函数块之前被调用。
base 关键字可带参数使用,也可不带参数使用。构造函数的任何参数都可用作 base 的参数
如果基类没有提供默认构造函数,派生类必须使用 base 显式调用基构造函数。
构造函数可以使用 this 关键字调用同一对象中的另一构造函数。和 base 一样,this 可带参数使用也可不带参数使用,构造函数中的任何参数都可用作 this 的参数
构造函数可以标记为 public、private、protected、internal 或 protectedinternal。
这些访问修饰符定义类的用户构造该类的方式。
使用 static 关键字可以将构造函数声明为静态构造函数。
在访问任何静态字段之前,都将自动调用静态构造函数,它们通常用于初始化静态类成员
静态构造函数
静态构造函数用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。
静态构造函数特点:
-
静态构造函数既没有访问修饰符,也没有参数。
-
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。
-
无法直接调用静态构造函数。
-
在程序中,用户无法控制何时执行静态构造函数。
-
静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
-
静态构造函数在为非托管代码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。
-
如果静态构造函数引发异常,运行时将不会再次调用该构造函数,并且在程序运行所在的应用程序域的生存期内,类型将保持未初始化。