что такое эквивалент C # статического {...} в Java? - PullRequest
21 голосов
/ 29 июля 2009

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

public class Foo {

    public static Foo DEFAULT_FOO;

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

    public Foo() {
    }

    void init() {
        // initialize
    }
}

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

Ответы [ 2 ]

39 голосов
/ 29 июля 2009

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

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

Вот подробнее .

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

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

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

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

3 голосов
/ 29 июля 2009

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

public class Foo {
    public static Foo DefaultFoo;

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

    public Foo() {
    }

    void init() {
        // initialize
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...