C#构造函数重载问题......

来源:百度知道 编辑:UC知道 时间:2024/06/30 05:48:17
class A
{
private string mima;

public A():this("123")
{

Console.WriteLine("带无参数的密码是{0}",mima);
}
public A(string z)
{
mima = z;
Console.WriteLine("有参函数的密码是{0}",mima);
}

}
class Program
{
static void Main(string[] args)
{
A a = new A();
A b = new A("asdasd");

}
}
为什么控制台打出3行 这是为什么 另解释一下this 有什么用 有了this构造函数是怎么运行的`````

this的意思一般是指对本身的引用,在这里的话意思是调用了和this匹配的构造函数后再调用带有this的构造函数,这也是输出三行的原因。
和this匹配意思是构造函数的参数和this里的参数匹配

首先实例了一个a对象
A a = new A();这时的是无参数的构造函数,然后输出
Console.WriteLine("带有参数的密码......",...};这行,也就是调用了和this匹配的构造函数public A(string z),这时有输出了
Console.WriteLine("无参数......",...};这句,那么a这个对象就输出了两行

A b = new A("asdasd");这个实例对象b是有参数的,所以调用了有参数的构造函数,也就是public A(string z);然后输出里面那行,这时后是不调用
public A()这个构造函数的,所以就不输出里面那行

所以最后是输出三行,this在这里的用法是调用了和this匹配的构造函数后再调用带有this构造函数,如果你把public A(string z)改成两个参数的话,运行这个程序就会报错

构建无参数的时先运行 mima = z;
Console.WriteLine("有参函数的密码是{0}",mima);
再运行 Console.WriteLine("带无参数的密码是{0}",mima);
再加上有参数的那个当然就是三行了
有参函数的密码是123
带无参数的密码是123
asdasd

该程序在执行时,首先调用A类的基类构造函数在该应用程序中相当于自身调用;然后调用A类的无参数构造函数;最后一句代码表示创建一个含参数的构造函数b对象,即调用含参数的构造函数。这里的this相当于A类本身,在执行的时候首先调用该基类。

在这段代码中,this所代表的是a类的系统默认的构造函数,因为系统会为每个类提供一个默认的构造函数。