编程语言中的构造函数
为什么constructor
不被视为类的member
?
有什么具体原因吗?
感谢致敬。
我拒绝这个问题的前提。 构造函数是 C#中的类或结构的成员。
我将向您推荐C#规范的3.4.4节(“类成员”),它列举了类的成员:
类声明可以包含常量,字段,方法,属性,事件,索引器,运算符,实例构造函数,析构函数,静态构造函数和类型的声明。
显然,构造函数是类的成员。 为什么你认为构造函数不是成员? 谁告诉你这个谎言?
成员inheritance到子类。 构造函数不得inheritance,因此不被视为成员。
构造函数不是inheritance的,因为它们的任务是初始化其特定类的属性。 任何子类都必须初始化其附加属性,对于此任务,它需要一个自己的构造函数来了解其他属性。
此外,每个构造函数必须直接或间接调用其超类构造函数之一作为其第一个操作,以便为超类提供初始化更改。
在C ++中,构造函数当然被认为是类的成员–C ++标准在“特殊成员函数”一节中描述了它们。
正如我所看到的,构造函数不是一个方法,而是Java提供的生命周期钩子(另一个生命周期钩子是最终的)。 这使你有机会在对象上调用任何方法之前做一些先决条件。所以方法和构造函数之间有明显的区别,因此即使语言规范也有,但是目的并不完全清楚。眼镜。
“了解构造函数”: http : //www.javaworld.com/jw-10-2000/jw-1013-constructors.html
正如Eric指出的那样 ,在C#中,构造函数被认为是类成员。 实际上,它只是一个类方法,其中包含编译器和运行时使用的其他元数据,因此在对象创建期间调用构造函数方法。
虽然它没有说明为什么,根据Java语言规范,第二版构造函数,静态初始化器和实例初始化器不是成员。