Определен ли порядок инициализации статического класса в C #?
Я провел некоторый поиск и думаю, что следующий код гарантированно выдаст результат:
B.X = 7
B.X = 0
A.X = 1
A = 1, B = 0
static class B
{
public static int X = 7;
static B() {
Console.WriteLine("B.X = " + X);
X = A.X;
Console.WriteLine("B.X = " + X);
}
}
static class A
{
public static int X = B.X + 1;
static A() {
Console.WriteLine("A.X = " + X);
}
}
static class Program
{
static void Main() {
Console.WriteLine("A = {0}, B = {1}", A.X, B.X);
}
}
Я запускал это много раз и всегда получал результат выше раздела кода; Я просто хотел проверить, изменится ли это? Даже если текстуально, классA
и классB
перестроены?
Гарантируется ли, что первое использование статического объекта вызовет инициализацию его статических членов, а затем создание его статического конструктора? Для этой программы, используяA.X
в основном вызовет инициализациюA.X
который в свою очередь инициализируетB.X
, затемB()
и после завершения инициализацииA.X
, приступим кA()
, В заключение,Main()
будет выводитьA.X
и B.X`.