생성자가 호출되기 전에 정적 필드 초기화가 완료되어야합니까?C#에서 정적 필드 초기화는 어떻게 작동합니까?
다음 프로그램은 나에게 잘못된 것처럼 보이는 출력을 제공합니다.
new A()
_A == null
static A()
new A()
_A == A
코드 :
public class A
{
public static string _A = (new A()).I();
public A()
{
Console.WriteLine("new A()");
if (_A == null)
Console.WriteLine("_A == null");
else
Console.WriteLine("_A == " + _A);
}
static A()
{
Console.WriteLine("static A()");
}
public string I()
{
return "A";
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
}
}
Dang! 나를 때려! –
모든 점에서 ... 정적 생성자가 먼저 실행되지 않습니다. 정적 필드 초기화 프로그램이 먼저 실행됩니다. – Prankster
A._A의 생성은 정적 생성자에서 발생합니다. 컴파일러가 정적 생성자 (.cctor)의 모든 필드 초기화를 C# 정적 생성자로 선언 된 코드 앞에 추가한다는 것입니다. –