Я провел некоторый поиск и думаю, что следующий код гарантированно выдаст результат:
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
переставлены?
Гарантируется ли, что первое использование статического объекта вызовет инициализацию его статических членов, а затем создание его статического конструктора? Для этой программы использование AX
в основном вызовет инициализацию AX
, которая, в свою очередь, инициализирует BX
, затем B()
и после завершения инициализации AX
перейдет к A()
. Наконец, Main()
выведет AX
и B.X '.