Section 42.2: 정적 (Static) 클래스의 수명 (lifetime)
정적 (static) 클래스는 실제 멤버 접근시점에 지연된 (lazy) 초기화를 수행하며, 어플리케이션 도메인이 유지되는 동안 수명을 같이한다.
void Main() {
Console.WriteLine("Static classes are lazily initialized");
Console.WriteLine("The static constructor is only invoked when the class is first accessed");
Foo.SayHi();
Console.WriteLine("Reflecting on a type won't trigger its static .ctor");
var barType = typeof (Bar);
Console.WriteLine("However, you can manually trigger it with System.Runtime.CompilerServices.RuntimeHelpers ");
RuntimeHelpers.RunClassConstructor(barType.TypeHandle);
}
// 다른 메소드 및 클래스들을 여기에 선언한다
public static class Foo {
static Foo() {
Console.WriteLine("static Foo.ctor");
}
public static void SayHi() {
Console.WriteLine("Foo: Hi");
}
}
public static class Bar {
static Bar() {
Console.WriteLine("static Bar.ctor");
}
}
실행 결과:
Static classes are lazily initialized
The static constructor is only invoked when the class is first accessed
static Foo.ctor
Foo: Hi
Reflecting on a type won't trigger its static .ctor
However, you can manually trigger it with System.Runtime.CompilerServices.RuntimeHelpers
static Bar.ctor
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
43.1: 정적 (static) 초기화 방식의 Singleton (0) | 2022.05.19 |
---|---|
42.3: Static 키워드 (0) | 2022.05.19 |
42.1: 정적 (Static) 클래스 (0) | 2022.04.27 |
41.7: 명시적 구현 (Explicit Implementation) 을 이용해 멤버를 숨김 처리하기 (0) | 2022.04.26 |
41.6: 인터페이스 사용 목적 (0) | 2022.04.23 |