下面先来看代码的执行结果:
类的静态构造方法被调用 带二个参数的构造方法被调用 带二个参数的构造方法被调用 带一个参数的构造方法被调用
静态字段 a 的值是:11
实例字段 b 的值是:33
实例字段 c 的值是:这是创建的实例 P1 静态字段 a 的值是:11
实例字段 b 的值是:34
实例字段 c 的值是:通过 this 关键字调用构造方法
现在用执行结果来介绍实例构造方法的执行过程,当第 26 行代码创建类的实例时,类的静态字段首先被设置成默认值,因为没有字段的初始值设定项,所以接着就执行类的静态构造方法。这时静态字段 a 被 设置成 11。因为第 26 行代码使用 new 调用了带有两个参数的实例构造方法,所以首先实例字段 b 被设置为 0,实例字段 c 被设置为 null。然后执行字段的初始值设定项,b 被赋值为 12,c 被赋值为“Hello World”。接 下来执行实例构造方法体中的第一个语句,“带二个参数的构造方法被调用”这个字符串被打印。接下来 实例 p1 的字段 b 被设置为传入的参数 33,注意构造方法的形参 a 在这里覆盖了类的静态字段 a。也就是说, 这时起作用的是实例构造方法的局部变量 a。然后实例字段 c 被设置为字符串"这是创建的实例 P1"。第 27 行代码使用 new 关键字调用了带一个参数的实例构造方法,在调用时,首先属于 p2 的实例字段 b 被设置为 0,实例字段 c 被设置为 null。然后执行字段的初始值设定项,b 被赋值为 12,c 被赋值为“Hello World”。接下来执行的是 this 引用的带两个参数的实例构造方法,"带二个参数的构造方法被调用"这个 字符串被打印。然后 b 被设置为 34,c 被设置为"通过 this 关键字调用构造方法"。最后,代码控制又返回 来执行带一个参数的实例构造方法体中的打印语句,"带一个参数的构造方法被调用"这个字符串被打印。 至此,实例构造方法的执行完毕。接下来的代码打印静态字段的值,可以看到两个实例打印出来的静态字段值是一样的,但是它们的实 例字段的值各不相同。
可选参数和命名参数也可以用于实例构造方法,下面看代码实例:
using System;
namespace LycheeTest {
class Program {
private int b;
private string c;
public Program(int a = 12, string s = "") {
this.b = a;
this.c = s;
}
public void Show() {
Console.WriteLine("实例字段 b 的值是:{0}", b);
Console.WriteLine("实例字段 c 的值是:{0}", c);
}
static void Main(string[] args) {
Program p1 = new Program(); //构造方法的两个参数都采用默认值
Program p2 = new Program(34); //构造方法的 string 类型参数采用默认值
Program p3 = new Program(23, "Hello World"); //构造方法的两个参数采用传入参数
Program p4 = new Program(s: "今天的天气真好"); //采用命名参数,另一个参数 a 采用默认值
p1.Show();
p2.Show();
p3.Show();
p4.Show();
Console.ReadKey();
}
}
}










