与包含的类同名的方法,但该方法没有返回类型:
public class MyClass
{
public MyClass()
{
}
//Rest of class definition
}
如果没有提供任何构造函数,编译器会在后台创建一个默认的构造函数。它只能把所有的成员字段初始化为标准的默认值(例如, 引用类型为空引用,数字数据类型为0, bool为false)
如果提供了带参数的构造函数编译器就不会自动提供默认的构造函数,只有在没有定义任何构造函数时,编译器才会 自动提供默认构造函数。
1. 静态构造函数
这种构造函数只执行一次,而前面的构造函数是实例构造函数,只要创建类的对象,它都会执行。
class MyClass
{
static MyClass()
{
// initialization code
}
// Rest of class definition
}
编写静态构造函数的一个原因是,类有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性。
- 静态构造函数不能带任何参数,一个类只能有一个静态构造函数。
- 静态构造函数没有访问修饰符
- 静态构造函数只能访问类的静态成员,不能访问实例成员。
- 无参数的构造函数尽管参数列表相同,但可以在类中与静态构造函数共存。因为静态构造函数是在加载类时执行,而实例构造函数是在创建实例时执行。
假定有 一个用户设置——BackColor,表示要在应用程序中使用的背景颜色。
namespace ConsoleApplication2
{
classProgram
{
public static readonly Color BackColor;
static Program()
{
DateTime now = DateTime.Now;
if (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday)
{
BackColor= Color.Green;
}
else
{
BackColor= Color.Red;
}
}
private Program()
{ }
这段代码说明了颜色设置如何存储在静态变量中,该静态变量在静态构造函数中进行初始化。把这个字段声明为只读类型,表示其值只能在构造函数中设置。
2. 从其他构造函数中调用构造函数
namespace ConsoleApplication3
{
classCar
{
privatestring description;
privateuint nWheels;
public Car(string description, uint nWheels)
{
this.description = description;
this.nWheels = nWheels;
}
// 构造函数初始化器
public Car(string description)
: this(description, 4)
{ }
staticvoid Main(string[] args)
{
}
}
}
C#构造函数初始化符也可以包含对直接基类的构造函数的调用(使用相同的语法,但应用base关键字代替this)