“构造函数是与类同名的特殊成员函数。当声明类的对象时,构造函数被自动调用以实现对该对象的初始化,因此构造函数必须是公有的成员函数。”
构造函数的返回值是什么类型的?我看了一下,居然没有类型,也void都不必声明,是有点特殊。如果我们试着用void来画蛇添足地声明一下看编译器提示什么?
using System;
class m
{
static void Main()
{
point p=new point();
}
}
class point
{
public void point() { }
}
class m
{
static void Main()
{
point p=new point();
}
}
class point
{
public void point() { }
}
编译结果:
p.cs(13,14): error CS0542: “point”: 成员名称不能与它们的封闭类型相同
p.cs(11,7): (与前一个错误相关的符号位置)
即它先认为void point是一个普通成员函数,但它不能与类同名。
试这一点时,我遇到一个问题:本来每个语句都要用分号结束,但这里,却不能写成
public point() { };
编译结果:
p.cs(13,20): error CS1597: 方法或访问器块后面的分号无效
这一点从理论上应该如何说明?特别是与enum的结构进行对比。
另一种写法:public point();,编译结果
p.cs(13,10): error CS0501: “point.point()”必须声明主体,因为它未标记为abstract 或 extern
如果构造函数是private的将会如何?
using System;
class m
{
static void Main()
{
// point p=new point();
}
}
class point
{
private point() { }
}
class m
{
static void Main()
{
// point p=new point();
}
}
class point
{
private point() { }
}
如果注释第7行,编译是没问题的,但一个类连构造函数都是私有,它活着还有什么意义?(后来发现还真的有这种类(如Math类),这种构造函数称为“私有构造函数”,通常用在只包含静态成员的类中。看来我的公共子程序可以放在静态类中了,不错不错)
如果构造函数不显式地声明为public,则它默认是private的,这一点,与前面测试的结果是一样的。