C#静态构造函数
这段时间开始看看设计模式,刚刚看了下Singleton模式,实现其最简洁的方法是:
很多人对这段代码不大理解,其实等价与:
现在都明白了吧,现在我们来探讨下静态构造函数,看看他是怎么来实现的.
静态构造函数,用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。,其方式与用于初始化实例数据的实例构造函数一样。静态构造函数与实例构造函数在使用规则上面有一些区别。与实例构造函数不一样,静态构造函数不能重载,所以可用的静态构造函数只有一个默认的无参静态构造函数。静态构造函数也不能显式的调用,不能在派生类中继承,但是在创建基类类型时可以调用。
C#在使用静态构造函数时的几个原则:
1.静态构造函数在创建类的实例之前调用,因此在所有实例构造函数之前调用。
2.静态构造函数在创建类的第一个实例之前调用。
3.静态构造函数在引用静态字段之前调用。
下面是简单例子:
则:
输出为:a,b,b,b,c
静态构造函数只调用了一次,但这种方式实现Singleton模式有个缺陷,构造函数不能带参数,不过并没有很大影响.
class Singleton
{
public static readonly Singleton instance = new Singleton();
private Singleton()
{ }
}
{
public static readonly Singleton instance = new Singleton();
private Singleton()
{ }
}
很多人对这段代码不大理解,其实等价与:
class Singleton
{
public static readonly Singleton instance;
static Singleton()
{
instance = new Singleton();
}
private Singleton()
{ }
}
{
public static readonly Singleton instance;
static Singleton()
{
instance = new Singleton();
}
private Singleton()
{ }
}
现在都明白了吧,现在我们来探讨下静态构造函数,看看他是怎么来实现的.
静态构造函数,用于初始化任何静态数据,或用于执行仅需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数。,其方式与用于初始化实例数据的实例构造函数一样。静态构造函数与实例构造函数在使用规则上面有一些区别。与实例构造函数不一样,静态构造函数不能重载,所以可用的静态构造函数只有一个默认的无参静态构造函数。静态构造函数也不能显式的调用,不能在派生类中继承,但是在创建基类类型时可以调用。
C#在使用静态构造函数时的几个原则:
1.静态构造函数在创建类的实例之前调用,因此在所有实例构造函数之前调用。
2.静态构造函数在创建类的第一个实例之前调用。
3.静态构造函数在引用静态字段之前调用。
下面是简单例子:
class Test
{
static Test()
{
Console.WriteLine("a");
}
public Test()
{
Console.WriteLine("b");
}
}
class TestOther : Test
{
public TestOther()
{
Console.WriteLine("c");
}
}
{
static Test()
{
Console.WriteLine("a");
}
public Test()
{
Console.WriteLine("b");
}
}
class TestOther : Test
{
public TestOther()
{
Console.WriteLine("c");
}
}
则:
Test t1 = new Test();
Test t2 = new Test();
TestOther t3 = new TestOther();
Test t2 = new Test();
TestOther t3 = new TestOther();
输出为:a,b,b,b,c
静态构造函数只调用了一次,但这种方式实现Singleton模式有个缺陷,构造函数不能带参数,不过并没有很大影响.