Section 39.9: 생성자와 속성값 초기화 순서
속성값의 할당이 클래스의 생성자보다 먼저 이루어지는지, 아니면 나중에 이루어지는지를 알아보도록 한다.
public class TestClass {
public int TestProperty {
get;
set;
} = 2;
public TestClass() {
if (TestProperty == 1) {
Console.WriteLine("Shall this be executed?");
}
if (TestProperty == 2) {
Console.WriteLine("Or shall this be executed");
}
}
}
var testInstance = new TestClass() {
TestProperty = 1
};
위 예제에서, TestProperty
값이 클래스의 생성자 안에서 이미 1
로 할당이 되어 있을지, 아니면 생성자 호출이 완료된 이후 할당이 되어있을지를 확인해 본다.
다음과 같이 인스턴스 생성시에 속성값을 할당하는 경우:
var testInstance = new TestClass() {TestProperty = 1};
실제 값 할당은 생성자가 실행 완료된 이후에 이루어진다. 그러나, 아래와 같은 C# 6.0 에서의 클래스 내 속성 값 초기화를 수행하는 경우:
public class TestClass {
public int TestProperty {
get;
set;
} = 2;
public TestClass() {}
}
실제 값 할당은 생성자가 실행 되기 전에 이루어진다.
위 두가지의 개념을 하나의 예제로 합쳐서 생각해보면:
public class TestClass {
public int TestProperty {
get;
set;
} = 2;
public TestClass() {
if (TestProperty == 1) {
Console.WriteLine("Shall this be executed?");
}
if (TestProperty == 2) {
Console.WriteLine("Or shall this be executed");
}
}
}
static void Main(string[] args) {
var testInstance = new TestClass() {
TestProperty = 1
};
Console.WriteLine(testInstance.TestProperty); // 최종 결과는 1 이 된다
}
최종 출력 결과:
"Or shall this be executed"
"1"
설명:
TestProperty
는 최초에 값 2
를 할당받게 되며, 이후 TestClass
의 생성자가 실행되고, 이로 인해 "Or shall this be executed" 출력이 이루어진다.
그런 다음 new TestClass() { TestProperty = 1 }
로 인해 TestProperty
의 값은 1
로 할당되며, 이후 Console.WriteLine(testInstance.TestProperty)
에 의해 출력되는 TestProperty
의 최종 값은
"1" 이 된다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
39.11: 생성자에서 가상 메소드 호출하기 (0) | 2022.03.28 |
---|---|
39.10: Generic 타입의 Static 생성자 (0) | 2022.03.24 |
39.8: Static 생성자에서의 예외 발생시의 동작 (0) | 2022.03.23 |
39.7: 파생된 클래스들의 종료자 (Finalizer) 호출 (0) | 2022.03.15 |
39.6: 기본 (base) 클래스의 생성자 호출하기 (0) | 2022.03.15 |