Um bloco estático Java é equivalente a um construtor estático C#?
-
20-09-2019 - |
Pergunta
Qual é a diferença real entre um construtor estático C# e um bloco estático Java?
Ambos devem ser sem parâmetros. Ambos são chamados apenas uma vez, quando a classe relacionada é usada pela primeira vez.
Estou perdendo alguma coisa, ou eles são a mesma coisa, apenas com nomes diferentes?
Solução
Eles são equivalentes, exceto que uma classe C# pode ter apenas um construtor estático (além de inicializadores de campo estático).
Além disso, em C#, um static
construtor aplicará o beforefieldinit
bandeira.
Outras dicas
Eles parecem iguais, o exemplo a seguir mostra que o construtor estático C# funciona da mesma forma que o bloqueio estático em java
protected Singleton()
{
Console.WriteLine("Singleton constructor");
}
private static readonly Singleton INSTANCE;
static Singleton() {
try {
INSTANCE = new Singleton();
}
catch(Exception e) {
throw new Exception();
}
}
Sim, eles são equivalentes, outro ponto é que o Java não suporta construtor estático, mas suporta o bloco estático e o construtor estático de suporte estático.
Eles não são.
Em C#, há blocos só podem conter construtores. Em Java, você pode executar declarações.