Является ли статический блок Java эквивалентным статическому конструктору C #? - PullRequest
11 голосов
/ 17 марта 2010

В чем реальная разница между статическим конструктором C # и статическим блоком Java?

Они оба должны быть без параметров. Они оба вызываются только один раз, когда связанный класс используется впервые.

Я что-то упускаю или это одно и то же, просто с разными именами?

Ответы [ 4 ]

9 голосов
/ 17 марта 2010

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

Также в C # конструктор static будет применять флаг beforefieldinit .

2 голосов
/ 12 октября 2011

Они выглядят одинаково, следующий пример показывает, что статический конструктор c # работает так же, как статический блок в java

protected Singleton()
{
    Console.WriteLine("Singleton constructor");
}

    private static readonly Singleton INSTANCE;

    static Singleton() {
        try {
           INSTANCE = new Singleton();
        }
        catch(Exception e) {
            throw new Exception();
        }
    }
0 голосов
/ 27 января 2016

Да, они эквивалентны Еще один момент - java не поддерживает статический конструктор, но поддерживает статический блок, а c # поддерживает статический конструктор.

0 голосов
/ 22 июля 2010

Это не так.

В C # блоки могут содержать только конструкторы. В Java вы можете выполнять инструкции.

...