Подтвердить что ты не робот

Что такое эквивалент С# static {...} в Java?

В Java я могу написать:

public class Foo {

    public static Foo DEFAULT_FOO;

    static {
        DEFAULT_FOO = new Foo();
        // initialize 
        DEFAULT_FOO.init();
    }

    public Foo() {
    }

    void init() {
        // initialize
    }
}

Как я могу получить тот же functionailty в С# (где статические члены инициализируются перед использованием)? И, если это плохо, чтобы попытаться сделать, что лучше подходит?

4b9b3361

Ответ 1

используется статический конструктор, например:

public class Foo
{
  static Foo()
  {
     // inits
  }
}

Здесь дополнительная информация.

Нижняя строка: это конструктор без пары с ключевым словом static. Работает так же, как статический блок в Java.

Изменить: Еще одно замечание. Если вы просто хотите создать что-то статически, вы можете статически инициализировать переменную без необходимости создания статического конструктора. Например:

public class Foo
{
  public static Bar StaticBar = new Bar();
}

Имейте в виду, что вам понадобится статический конструктор, если вы хотите вызывать любые методы в Bar во время статической инициализации, поэтому вашему примеру, который вызывает Foo.Init(), все еще нужен статический конструктор. Я просто говорю, что вы не ограничены, это все.:)

Ответ 2

Static по-прежнему является ключевым словом в С#:

public class Foo {
    public static Foo DefaultFoo;

    static Foo {
        DefaultFoo = new Foo();
        // initialize 
        DefaultFoo.init();
    }

    public Foo() {
    }

    void init() {
        // initialize
    }
}