C# 정적 생성자와 Java 정적 블록의 실제 차이점은 무엇입니까?Java 정적 블록이 C# 정적 생성자와 동일합니까?
둘 다 매개 변수가 없어야합니다. 관련 클래스가 처음 사용될 때 둘 다 한 번만 호출됩니다.
뭔가가 누락 되었습니까? 아니면 이름이 다른 것과 같은 것입니까?
C# 정적 생성자와 Java 정적 블록의 실제 차이점은 무엇입니까?Java 정적 블록이 C# 정적 생성자와 동일합니까?
둘 다 매개 변수가 없어야합니다. 관련 클래스가 처음 사용될 때 둘 다 한 번만 호출됩니다.
뭔가가 누락 되었습니까? 아니면 이름이 다른 것과 같은 것입니까?
C# 클래스에는 하나의 정적 생성자 (정적 필드 초기화 프로그램 포함) 만있을 수 있다는 점을 제외하고는 동일합니다.
또한 C#에서 static
생성자는 beforefieldinit
flag을 적용합니다.
그렇지 않습니다.
C#에서는 블록에 생성자 만 저장할 수 있습니다. 자바에서는 문장을 실행할 수 있습니다.
사실이 아닙니다. C# 정적 생성자는 명령문을 실행할 수 있습니다. – Aaron
그들은 또 다른 포인트는 자바 정적 생성자를 지원하지만, 정적 지원하지 않는 것입니다
protected Singleton()
{
Console.WriteLine("Singleton constructor");
}
private static readonly Singleton INSTANCE;
static Singleton() {
try {
INSTANCE = new Singleton();
}
catch(Exception e) {
throw new Exception();
}
}
예 그들은 동일 동일, 다음의 예와, 그 C#을 정적 생성자는 자바에서 정적 블록으로 동일하게 작동 볼 블록 및 C# 정적 생성자를 지원합니다.
분명히 Java는 MSIL로 컴파일되지 않기 때문에 beforefieldinit 플래그를 적용하지 않습니다. – Joren
@Joren : 나는 그것을 깨달았다. 그러나 두 기능의 동작 차이가 있습니다. – SLaks
네,하지만 (너무 명확하지는 않습니다.) 요점은 : 구현 세부 사항보다 코드 의미 (즉, 필드 초기화 순서와 정적 생성자 순서)의 차이를 설명하는 것이 더 유용 할 수 있습니다. (특히 두 언어 중 하나에 대해 아무런 의미가없는 세부 사항이있는 경우) – Joren