생성자 상속하기
앞에서 알아본 base() 형태를 생성자 상속이라고 합니다. 이번에는 생성자 상속 예제를 만들어 보겠습니다. 다음 내용을 입력한 후 실행해 보세요. 현재 코드는 “부록 A. 디버거 사용하기”를 참고하여 F10을 여러 번 누르면서 단계별로 실행되는 순서를 살펴보면 좀 더 이해하기 쉽습니다.
생성자 상속: ConstructorInheritance.cs
using System; namespace ConstructorInheritance { public class Parent { public string Word { get; set; } public Parent(string word) //생성자로 속성을 초기화 { this.Word = word; } } public class Child : Parent { //① this() 형태로, 자신의 매개변수가 있는 생성자에 기본 문자열 전달 public Child() : this("[1] 매개변수가 없는 생성자 실행") { } //② base() 형태로, 매개변수 값을 부모 클래스의 매개변수가 있는 생성자에 전달 public Child(string message) : base(message) { } public void Say() => Console.WriteLine(base.Word); //부모의 World 속성 출력 } class ConstructorInheritance { static void Main() { (new Child()).Say(); (new Child("[2] 매개변수가 있는 생성자 실행")).Say(); } } }
실행 결과
[1] 매개변수가 없는 생성자 실행 [2] 매개변수가 있는 생성자 실행
클래스 내에서 this()는 자신의 매개변수가 없는 생성자를 의미합니다. 또 this(매개변수)는 매개변수가 있는 생성자를 호출합니다.
①은 매개변수가 없는 생성자가 호출되면 기본값으로 자신의 매개변수가 있는 생성자를 호출합니다.
②는 매개변수가 있는 생성자에서 받은 message 변수 값을 다시 부모 클래스의 생성자를 가리키는 base(message)를 호출하여 부모 생성자에 전달합니다.