每当创建类或结构时,将会调用其构造函数。 类或结构可能具有采用不同参数的多个构造函数。 使用构造函数,
程序员能够设置默认值、限制实例化,并编写灵活易读的代码。
无参数构造函数 如果没有为类提供构造函数,则 C# 将默认创建一个构造函数,该函数会实例化对象并将成员变量设置为默认 值,如 C# 类型的默认值中所列。 如果没有为结构提供构造函数,C# 将依赖于隐式无参数构造函数,自动将每个 字段初始化为其默认值。
构造函数语法
构造函数是一种方法,其名称与其类型的名称相同。 其方法签名仅包含方法名称和其参数列表;它不包含返回类
型。
public class Person {
private string last;
private string first;
public Person(string lastName, string firstName) {
last = lastName; first = firstName; }
// Remaining implementation of Person class.
}
如果某个构造函数可以作为单个语句实现,则可以使用表达式主体定义。 以下示例定义 Location 类,其构造函 数具有一个名为“name”的字符串参数。 表达式主体定义给 locationName 字段分配参数。
public class Location
{
private string locationName;
public Location(string name) => Name = name;
public string Name
{
get => locationName;
set => locationName = value;
}
}
静态构造函数
前面的示例具有所有已展示的实例构造函数,这些构造函数创建一个新对象。 类或结构也可以具有静态构造函数,该静态构造函数初始化类型的静态成员。 静态构造函数是无参数构造函数。 如果未提供静态构造函数来初始化静态字段,C# 编译器会将静态字段初始化为其默认值,如 C# 类型的默认值中所列。
以下示例使用静态构造函数来初始化静态字段。
public class Adult : Person {
private static int minimumAge;
public Adult(string lastName, string firstName) : base(lastName, firstName{ }
static Adult()
{
minimumAge = 18;
} // Remaining implementat
ion of Adult class.
}
也可以通过表达式主体定义来定义静态构造函数,如以下示例所示。
public class Child : Person {
private static int maximumAge;
public Child(string lastName, string firstName) : base(lastName, firstName{ }
static Child() => maximumAge = 18;
// Remaining implementation of Child class.
}