首先个人觉得这个题目有点问题,至少题目没有说清楚(因为类不一定有初始化器,除非它有静态字段并且有字段赋值表达式。还有一个问题就是:是不是第一次调用构造函数)。我用程序验证了下(以下都是有初始化器的情况,没初始化器的情况当然选B了):
namespace ConsoleApplication1
{
class Test
{
public Test(string mes)
{
Console.WriteLine(mes);
}
}
class ConditionA
{
static Test t = new Test("隐式的初始化函数被调用!");//.net会在IL中生成初始化函数,你可以用ILDASM查看
public ConditionA()
{
Console.WriteLine("带隐式初始化函数类的构造函数被调用!");
}
public static void Function()
{
Console.WriteLine("。。。。。。!");
}
}
class ConditionB
{
static Test t;
static ConditionB()
{
t=new Test("自定义的初始化函数被调用!");
}
public ConditionB()
{
Console.WriteLine("带显示初始化函数类的构造函数被调用!");
}
}
class Program
{
private static void Main(string[] args)
{
Console.WriteLine("第一次构造对象:");
Console.WriteLine("拥有隐式初始化函数的类:");
ConditionA ca = new ConditionA();
Console.WriteLine("------------------------------------------");
Console.WriteLine("拥有显示初始化函数的类:");
ConditionB cb = new ConditionB();
Console.WriteLine("==========================================");
Console.WriteLine("再次构造对象:");
Console.WriteLine("拥有隐式初始化函数的类:");
ConditionA ca1 = new ConditionA();
Console.WriteLine("------------------------------------------");
Console.WriteLine("拥有显示初始化函数的类:");
ConditionB cb1 = new ConditionB();
Console.Read();
}
}
}
ps:不过结果貌似和.NET本质论上讲的相悖,因为不管是隐式的还是显示的初始化器都在第一次访问类型是都要先调用!