以下程序的输出是:
Non-Static
Static
Non-Static
Run Code Online (Sandbox Code Playgroud)
这是编译器错误吗?我期望:
Static
Non-Static
Non-Static
Run Code Online (Sandbox Code Playgroud)
因为我认为静态构造函数总是在非静态构造函数之前被调用.
我使用.net 3.5和.net 4.0对Visual Studio 2010进行了测试.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace StaticConstructorBug
{
class Program
{
static void Main(string[] args)
{
var mc = new MyClass();
Console.ReadKey();
}
}
public class MyClass
{
public MyClass()
{
Console.WriteLine("Non-static");
}
static MyClass()
{
Console.WriteLine("Static");
}
public static MyClass aVar = new MyClass();
}
}
Run Code Online (Sandbox Code Playgroud) 据我所知,父类的构造函数先调用然后调用子类.但是为什么在静态构造函数的情况下它首先从派生类执行,然后是子类?
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
子静态构造函数
父静态构造函数
父实例构造函数
子实例构造函数
现在按照Jeppe Stig Nielsen建议,当我在构造函数中初始化静态字段时,它按以下顺序运行
产量
父静态构造函数
子静态构造函数
父实例构造函数
子实例构造函数
class XyzParent
{ …Run Code Online (Sandbox Code Playgroud)