我们知道对于class和struct都可以定义构造函数,而构造函数又有实例构造函数和静态构造函数。实例构造函数在每次实例化时,都会执行一次。那静态构造函数是否如此呢?我们先来看一段代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConstructorTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(CData.Num);///A
Console.WriteLine(CData.Num);///B
Console.ReadLine();
}
}
public class CData
{
public static int Num = 0;
static CData()
{
Num++;
}
}
}
我们猜测一下执行的结果:
A行输出的是1.这个比较容易想到,因为Num初始为0,在构造函数中执行了Num++,所以结果为1.
那B行输出的呢?会不会又执行了一次Num++,导致输出结果为2?我们来看输出的结果,见下图