Ответ 1
Они эквивалентны, за исключением того, что класс С# может иметь только один статический конструктор (плюс инициализаторы статического поля).
Кроме того, в С# конструктор static
будет применять флаг beforefieldinit
.
Какова реальная разница между статическим конструктором С# и статическим блоком Java?
Оба они должны быть без параметров. Они вызываются только один раз, когда сначала используется связанный класс.
Я что-то пропускаю, или они одно и то же, только с разными именами?
Они эквивалентны, за исключением того, что класс С# может иметь только один статический конструктор (плюс инициализаторы статического поля).
Кроме того, в С# конструктор static
будет применять флаг beforefieldinit
.
Они выглядят одинаково, в следующем примере показано, что статический конструктор С# работает так же, как статический блок в java
protected Singleton()
{
Console.WriteLine("Singleton constructor");
}
private static readonly Singleton INSTANCE;
static Singleton() {
try {
INSTANCE = new Singleton();
}
catch(Exception e) {
throw new Exception();
}
}
Да Они эквивалентны Другим моментом является то, что java не поддерживает статический конструктор, но поддерживает статический конструктор static block и С#.
Это не так.
В С# блоки могут содержать только конструкторы. В java вы можете выполнять инструкции.