Section 39.8: Static 생성자에서의 예외 발생시의 동작
만약 static 생성자가 예외를 발생시킨다면, 이는 이후 다시 재시도되지 않는다. 따라서, 해당 타입 자체가 앱 도메인의 실행 기간 전체에 걸쳐 사용 불가능하게 된다. 이후로 해당 타입을 사용하고자 하는 모든 시도는 원래의 예외를 감싸고 있는 TypeInitializationException
을 발생시킬 것이다.
public class Animal {
static Animal() {
Console.WriteLine("Static ctor");
throw new Exception();
}
public static void Yawn() {}
}
try {
Animal.Yawn();
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
try {
Animal.Yawn();
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
위 코드는 다음과 같은 결과를 출력할 것이다:
Static ctor
System.TypeInitializationException: The type initializer for 'Animal' threw an exception. ---> System.Exception: Exception of type 'System.Exception' was thrown.
[...]
System.TypeInitializationException: The type initializer for 'Animal' threw an exception. ---> System.Exception: Exception of type 'System.Exception' was thrown.
여기서 실제 생성자는 단 한번만 실행이 되며, 이후에는 해당 예외가 재사용될 것이다.
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
39.10: Generic 타입의 Static 생성자 (0) | 2022.03.24 |
---|---|
39.9: 생성자와 속성값 초기화 순서 (0) | 2022.03.24 |
39.7: 파생된 클래스들의 종료자 (Finalizer) 호출 (0) | 2022.03.15 |
39.6: 기본 (base) 클래스의 생성자 호출하기 (0) | 2022.03.15 |
39.5: 생성자에서 다른 생성자 호출하기 (0) | 2022.03.14 |