最近学习C#,讲到C#的私有构造函数时,有一些疑问。
示例代码:
class circle
{
private circle()
{
//do somthing...
}
private circle(double x)
{
//do somthing...
}
}class myapp
{
public static void Main()
{
//do somthing...
}
}
1.如果不编写自己的构造函数,每一个应该有一个默认的构造函数。
我写了构造函数以后,应该是重载OVERLOAD了构造函数,而不是覆盖默认的构造函数,为什么使用
circle first = new circle();
时编译器不会去寻找默认的构造函数来创建对象呢。
2.对于构造函数内的代码,是否没有意义了呢?比如示例中的private circle()内部的代码是不是永远无法执行。
3.private circle(double x),是否也同疑问2,其内部代码无法执行。
示例代码:
class circle
{
private circle()
{
//do somthing...
}
private circle(double x)
{
//do somthing...
}
}class myapp
{
public static void Main()
{
//do somthing...
}
}
1.如果不编写自己的构造函数,每一个应该有一个默认的构造函数。
我写了构造函数以后,应该是重载OVERLOAD了构造函数,而不是覆盖默认的构造函数,为什么使用
circle first = new circle();
时编译器不会去寻找默认的构造函数来创建对象呢。
2.对于构造函数内的代码,是否没有意义了呢?比如示例中的private circle()内部的代码是不是永远无法执行。
3.private circle(double x),是否也同疑问2,其内部代码无法执行。
{
private circle()
{
System.Console.WriteLine("circle()");
} private circle(double x)
{
System.Console.WriteLine(x);
} public circle(double x, double y) : this(x+y) // 可以访问自己的私有成员
{
}
}class myapp
{
public static void Main()
{
// circle first = new circle(); // 错误,不能访问私有成员。
// circle second = new circle(2); // 错误,不能访问私有成员。
circle third = new circle(1,2); // 可以。
}
}
我写了构造函数以后,应该是重载OVERLOAD了构造函数,而不是覆盖默认的构造函数,为什么使用
circle first = new circle();
时编译器不会去寻找默认的构造函数来创建对象呢。
-----------------------------------------------------
你没有写构造函数的话,编译器才默认给你添加一个公用的构造函数,你写了的话是不会添加的。
2.对于构造函数内的代码,是否没有意义了呢?比如示例中的private circle()内部的代码是不是永远无法执行。
----------------
不是永远没办法执行,例如:class circle
{ private static c = new circle(); // 这里就执行了 private circle()
private circle()
{
//do somthing...
}
public circle(double x) : this() // 这里就执行了 private circle()
{
//do somthing...
}
}
3.private circle(double x),是否也同疑问2,其内部代码无法执行。
------------------
和问题2一样,参数不一样而已
此时这样调用更习惯:frmOption.ShowDialog(),省去的构造对象的语句
而这样做的话可以把frmOption封装成私有构造函数,而ShowDialog封装成静态函数,在其内部调用其私有构造函数