다음과 같은 3개의 생성자를 오버로딩하는 클래스가 있다고 하자
class Sample {
int a, b, c;
public Sample() {
this.a = 1;
}
public Sample(int b) {
this.a = 1;
this.b = b;
}
public Sample(int b, int c) {
this.a = 1;
this.b = b;
this.c = c;
}
}
문법상으로 문제는 없지만, 같은 코드가 중복되어 있다.
Sample(int)에서 Sample() 생성자를 호출하고, b만 초기화 시켜줄 수는 없을까?
이러한 문제를 해결하기 위해 C#에서는 this() 생성자를 제공해준다.
this() 생성자를 활용한 예제
class Sample {
int a, b, c;
public Sample() {
this.a = 1;
Console.WriteLine("Sample()");
}
public Sample(int b) : this() {
this.b = b;
Console.WriteLine("Sample({0})", b);
}
public Sample(int b, int c) : this(b) {
this.c = c;
Console.WriteLine("Sample({0}, {1})", b, c);
}
public void PrintFields() {
Console.WriteLine("a:{0}, b:{1}, c:{2}", a, b, c);
}
}
테스트
class MainApp {
static void Main() {
Sample a = new Sample();
a.PrintFields();
Console.WriteLine();
Sample b = new Sample(2);
b.PrintFields();
Console.WriteLine();
Sample c = new Sample(2, 3);
c.PrintFields();
Console.WriteLine();
}
}
출력 결과
Sample()
a:1, b:0, c:0
Sample()
Sample(2)
a:1, b:2, c:0
Sample()
Sample(2)
Sample(2, 3)
a:1, b:2, c:3
Sample(int, int) 생성자는 Sample(int)생성자를 호출하고, Sample(int) 생성자는 Sample() 생성자를 호출한다.
참조
뇌를 자극하는 C# 5.0 프로그래밍, 박상현, 한빛미디어
'아카이빙 > C#' 카테고리의 다른 글
[C#] 오버라이딩 (0) | 2018.06.18 |
---|---|
[C#] 형변환과 is, as (0) | 2018.06.18 |
[C#] 얕은 복사와 깊은 복사 (0) | 2018.06.18 |
[C#] static 필드와 메소드 (0) | 2018.06.18 |
[C#] 유니티에서 foreach 성능은 개선되었을까 (1) | 2017.05.06 |