2010-03-17 6 views
10

C# 정적 생성자와 Java 정적 블록의 실제 차이점은 무엇입니까?Java 정적 블록이 C# 정적 생성자와 동일합니까?

둘 다 매개 변수가 없어야합니다. 관련 클래스가 처음 사용될 때 둘 다 한 번만 호출됩니다.

뭔가가 누락 되었습니까? 아니면 이름이 다른 것과 같은 것입니까?

답변

9

C# 클래스에는 하나의 정적 생성자 (정적 필드 초기화 프로그램 포함) 만있을 수 있다는 점을 제외하고는 동일합니다.

또한 C#에서 static 생성자는 beforefieldinit flag을 적용합니다.

+0

분명히 Java는 MSIL로 컴파일되지 않기 때문에 beforefieldinit 플래그를 적용하지 않습니다. – Joren

+0

@Joren : 나는 그것을 깨달았다. 그러나 두 기능의 동작 차이가 있습니다. – SLaks

+2

네,하지만 (너무 명확하지는 않습니다.) 요점은 : 구현 세부 사항보다 코드 의미 (즉, 필드 초기화 순서와 정적 생성자 순서)의 차이를 설명하는 것이 더 유용 할 수 있습니다. (특히 두 언어 중 하나에 대해 아무런 의미가없는 세부 사항이있는 경우) – Joren

-2

그렇지 않습니다.

C#에서는 블록에 생성자 만 저장할 수 있습니다. 자바에서는 문장을 실행할 수 있습니다.

+1

사실이 아닙니다. C# 정적 생성자는 명령문을 실행할 수 있습니다. – Aaron

1

그들은 또 다른 포인트는 자바 정적 생성자를 지원하지만, 정적 지원하지 않는 것입니다

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

    private static readonly Singleton INSTANCE; 

    static Singleton() { 
     try { 
      INSTANCE = new Singleton(); 
     } 
     catch(Exception e) { 
      throw new Exception(); 
     } 
    } 
0

예 그들은 동일 동일, 다음의 예와, 그 C#을 정적 생성자는 자바에서 정적 블록으로 동일하게 작동 볼 블록 및 C# 정적 생성자를 지원합니다.