아카이빙/C#

[C#] this() 생성자

셩님 2018. 6. 18. 04:58

[C#] this() 생성자

  • 다음과 같은 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