C# разрешает зависимости среди статических элементов данных автоматически?

2 ответа

Как было сказано ранее, инициализация статического поля является детерминированной и происходит в соответствии с порядком объявления текста.

Take это, например:

class Foo
{
    public static string b = a + "def";
    public static string a = "abc";
}

Foo.b всегда будет возвращать "def".

В этом отношении, когда существует зависимость между статическими полями, лучше использовать статический инициализатор:

class Foo
{
    public static string b;
    public static string a;

    static Foo()
    {
        a = "abc";
        b = a + "def";
    }
}

Таким образом, вы явно выражаете беспокойство по поводу порядка инициализации; или зависимости в этом отношении (даже если компилятор не поможет, если вы случайно поменяете местами операторы инициализации.) Вышеупомянутые ожидаемые значения будут сохранены в a и b (соответственно «abc» и «abcdef»).

Однако , все может стать запутанным (и зависящим от реализации) для инициализации статических полей, определенных в нескольких классах.

9
ответ дан 3 November 2019 в 01:01
поделиться

Он всегда будет отображать «abcdef», потому что инициализация идет сверху вниз в исходном коде, как и раньше.

Все статические члены будут инициализированы при загрузке содержащего их classtype. ]

2
ответ дан 3 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: