C# 인스턴스 초기화 순서 정리

 

 

인스턴스의 초기화 순서를 알아두면 초기화 시점에 따른 초기화 오류를 방지할 수 있다.  

 

 

멤버 초기화 구문

 - 멤버 초기화 구문에 의해 생성된 코드는 생성자 본문 앞에 덧붙여진다.

   (즉, 생성자보다 '먼저' 호출된다고 생각하면 된다)

 - 멤버초기화는 생성자보다 먼저 호출된다.

 

 

정적 생성자

 - 첫 번째 인스턴스가 만들어지거나 정적 멤버가 참조되기 전에 호출된다.

 - 정적 생성자는 인스턴스 생성자보다 먼저 호출된다. 

 

 

전체 초기화 순서

 - 두 가지 순서를 확장해서 살펴보면 크게 정적 필드 초기화 -> 정적 생성자 -> 인스턴스 필드 초기화 -> 인스턴스 생성자의 호출 순서를 가지는 것을 알 수 있다.

1. 정적 변수의 메모리를 0으로 초기화
2. 정적 변수 초기화
3. 베이스 클래스의 정적 생성자 호출
4. 정적 생성자 호출
5. 인스턴스 변수의 메모리를 0으로 초기화
6. 인스턴스 변수 초기화
7. 베이스 클래스의 인스턴스 생성자 호출
8. 인스턴스 생성자 호출

# 동일한 타입으로 추가 인스턴스가 발생시 5단계부터 수행된다.

멤버초기화는 호출순서가 우선되니 값을 바로 사용할 수 있는 장점이 있지만 예외를 처리하지 못한다. 예외 가능성이 있다면 생성자에서 초기화하도록 하자.

 

 

 

댓글

Designed by JB FACTORY