本节书摘来自异步社区《.NET程序员面试秘笈》一书中的第1章,面试题7,作者: 张云翯, 更多章节内容可以访问云栖社区“异步社区”公众号查看。
面试题7 构造函数有什么作用
.NET程序员面试秘笈
【考点】各种形态构造函数的理解,派生类的构造函数,构造函数的重载。
【出现频率】
【解答】
构造函数用于创建类的实例,并对实例进行初始化操作,通过不同的参数传递,可进行不同的实例初始化操作。本例通过多种不同形式的构造函数创建实例,并输出初始化的结果。在ch01目录下新建一个程序文件,并命名为Constructor.cs,编写代码如程序1.8所示。
在命令行下编译Constructor.cs后,执行Constructor程序,其效果如图1.10所示。
【分析】
前面的所有示例中都使用了构造函数,因为构造函数用于创建类的实例(对象)。在类中声明构造函数可对新实例(对象)进行初始化的操作,其编写方法如以下代码所示:
class 类名称
{
访问修饰符 类名称()
{
初始化操作;
}
}
可见,构造函数和类中的方法类似,也是一种函数,不过构造函数的名称必须和类名称相同。并且构造函数没有返回值,所以其函数签名和一般的函数有区别。没有参数的构造函数被称为默认构造函数,如果非静态类的类体中没有声明构造函数,类将自动提供一个默认构造函数,并将类成员初始化为默认值。
说明:
结构类型(Struct)是值类型,不需要显式声明默认构造函数,编译器将自动生成默认构造函数。当用new运算符实例化时默认构造函数才被调用,将成员初始化为默认值。
通过不同的参数传递,在类体中可声明多个构造函数,即实现构造函数的重载。其编写方法如以下代码所示:
class 类名称
{
访问修饰符 类名称()
{
初始化操作1;
}
访问修饰符 类名称( 参数类型1 参数1......)
{
初始化操作2;
}
访问修饰符 类名称( 参数类型2 参数1......)
{
初始化操作3;
}
}
在程序中创建该类的实例(对象)时,通过传递参数的不同,调用不同的构造函数进行不同的初始化操作。程序中创建实例(对象)的方法如以下代码所示:
类型名称 对象名称 = new 构造函数(); //默认构造函数
类型名称 对象名称 = new 构造函数(参数列表);
一般情况下,构造函数是实例构造函数,即可通过该构造函数在类外部创建类的实例。反之,如果需要阻止创建类的实例,可在声明私有的默认构造函数,这种情况一般用于无实例成员的类中。如果需要完成只执行1次的操作,可以声明静态构造函数。这种构造函数在创建实例前或引用静态成员前自动调用,一般用于对静态成员的操作。
说明:
无实例成员的类可声明为静态类,即无须声明私有的默认构造函数。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。