더북(TheBook)

생성자 상속하기

앞에서 알아본 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)를 호출하여 부모 생성자에 전달합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.