Я провел некоторый поиск, и я думаю, что следующий код гарантированно выдаст результат:
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
и BX`.