为什么constructor
不被视为班级的member
?
有什么具体原因吗?
谢谢和问候。
答案 0 :(得分:9)
我拒绝这个问题的前提。构造函数是 C#中类或结构的成员。
我引用C#规范的3.4.4节(“类成员”),它列举了一个类的成员:
类声明可能包含 常量,字段的声明, 方法,属性,事件,索引器, 运算符,实例构造函数, 析构函数,静态构造函数和 类型。
显然,构造函数是类的成员。为什么你认为构造函数不是成员?谁告诉你这个谎言?
答案 1 :(得分:8)
成员继承到子类。构造函数不得继承,因此不被视为成员。
构造函数不是继承的,因为它们的任务是初始化其特定类的属性。任何子类都必须初始化其附加属性,对于此任务,它需要一个自己的构造函数来了解其他属性。
此外,每个构造函数必须直接或间接地调用其超类构造函数之一作为其第一个操作,以便为超类提供初始化更改。
答案 2 :(得分:7)
在C ++中,构造函数当然被认为是类的成员--C ++标准在“特殊成员函数”一节中描述了它们。
答案 3 :(得分:2)
正如我所看到的,构造函数不是一个方法,而是Java提供的生命周期钩子(另一个生命周期钩子是finalize)。 这使你有机会在对象上调用任何方法之前做一些先决条件。所以方法和构造函数之间有明显的区别,因此即使语言规范也有,但是目的并不完全清楚。规格。
答案 4 :(得分:1)
答案 5 :(得分:0)
正如Eric指出out,在C#构造函数中, 被认为是类成员。实际上,它只是一个类方法,其中包含编译器和运行时使用的其他元数据,因此在对象创建期间调用构造函数方法。
虽然它没有说明原因,但根据Java Language Specification, Second Edition构造函数,静态初始值设定项和实例初始值设定项不是成员。