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/

반응형

+ Recent posts