那么类的静态构造方法能否被显式调用呢?下面看代码实例:
using System;
namespace LycheeTest {
class Program {
private static int a;
static Program() {
Console.WriteLine("类的静态构造方法被调用");
a = 11;
}
static void Main(string[] args) {
Program();
Console.ReadKey();
}
}
}
在这段代码中的第 10 行显式调用了类的静态构造方法,这时编译器会报错。
2.实例构造函数
类的实例构造方法是类的成员方法的一种,它的作用是对类的实例成员进行初始化操作。实例构造方法可以实现重载,在创建类的实例时,可以显式的指定不同的参数来调用重载的不同的实例构造方法。下面请看代码实例:
using System;
namespace LycheeTest {
class Program {
private static int a;
private int b = 12;
private string c = "Hello World";
static Program() {
Console.WriteLine("类的静态构造方法被调用");
a = 11;
}
public Program(int a, string s) {
Console.WriteLine("带二个参数的构造方法被调用");
this.b = a;
this.c = s;
}
public Program(int a) : this(a, "通过 this 关键字调用构造方法") {
Console.WriteLine("带一个参数的构造方法被调用");
}
public void Show() {
Console.WriteLine("静态字段 a 的值是:{0}", a);
Console.WriteLine("实例字段 b 的值是:{0}", b);
Console.WriteLine("实例字段 c 的值是:{0}", c);
}
static void Main(string[] args) {
Program p1 = new Program(33, "这是创建的实例 P1");
Program p2 = new Program(34);
p1.Show();
p2.Show();
Console.ReadKey();
}
}
这段代码的第 4 行、第 5 行和第 6 行分别定义了三个字段成员,第 4 行是静态字段,第 5 行和第 6 行代码都有初始值设定项。代码的第 8 行就是一个实例构造方法的定义,实例构造方法也是以类名作为方法名,它没有返回值, 在方法名前面是访问权限修饰符,可以使用的访问权限修饰符包括 public、private 和 protected。其中的 protected 意味着构造方法只能在此类内部访问。实例构造方法可以带参数。 第 12 行代码的实例构造方法使用两个传入的参数对实例字段进行了赋值。第 17 行代码定义了带一个参数的实例构造方法,它和前一个实例构造方法形成了重载。实例构造方法可以通过 this 关键字调用其他的实例构造方法,方法就是在参数列表的后面使用冒号然后接 this 关键字, 然后再跟参数列表,这个参数列表要匹配另一个重载的实例构造方法。第 17 行的构造方法只有一个参数, 它将这个参数通过 this 关键字传递给了另一个构造方法,在用 this 调用另一个构造方法的时候,为其同时传入了一个字符串参数。第 24 行的实例方法打印类的字段成员的值。在 Main 方法中,第 26 行代码和第 27 行代码分别定义了两个实例,它们使用 new 关键字调用了不同的实例构造方法。第 28 行和第 29 行分别调用实例方法打印类的静态字段和实例的两个字段成员的值。










