据我所知,首先调用父类的构造函数,然后调用子类。但是为什么在静态构造函数的情况下,它首先从派生类执行,然后是子类?
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Child t = new Child();
}
}
class Parent
{
public Parent()
{
Console.WriteLine("Parent Instance Constructor");
Console.ReadKey();
}
static Parent()
{
Console.WriteLine("Parent Static Constructor");
Console.ReadKey();
}
}
class Child : Parent
{
public Child()
{
Console.WriteLine("Child Instance Constructor");
Console.ReadKey();
}
static Child()
{
Console.WriteLine("Child Static Constructor");
Console.ReadKey();
}
}
}
输出:
子静态构造函数
父静态构造函数
父实例构造函数
子实例构造函数
现在根据Jeppe Stig Nielsen的建议,当我在构造函数中初始化静态字段时,它按以下顺序运行
输出
父静态构造函数
子静态构造函数
父实例构造函数
子实例构造函数
class XyzParent
{
protected static int FieldOne;
protected int FieldTwo;
static XyzParent()
{
// !
FieldOne = 1;
Console.WriteLine("parent static");
}
internal XyzParent()
{
// !
FieldOne = 10;
// !
FieldTwo = 20;
Console.WriteLine("parent instance");
}
}
class XyzChild : XyzParent
{
static XyzChild()
{
// !
FieldOne = 100;
Console.WriteLine("child static");
}
internal XyzChild()
{
// !
FieldOne = 1000;
// !
FieldTwo = 2000;
Console.WriteLine("child instance");
}
}
为什么会有这种矛盾的行为?