본문 바로가기
C#/책 정리

C# 정리 ) base

2021. 12. 1.

this 명령어가 클래스 인스턴스 그 자체를 가리키는 것과 달리 base [예약어]는 [부모 클래스]를 명시적 으로 가리킬 때 사용한다.

이번에도 this와 마찬가지이다. 지그까지 사용한 부모 클래스의 멤버들은 base. 가 생략된 것이다.

using System;

namespace Project1
{
    class Test
    {
        protected void print()
        {
            Console.WriteLine("테스트");
        }
    }
    class Test2 : Test
    {
        public void PRINT()
        {
            base.print();
            base.print();
        }
    }
    class Class1
    {
        
        public static void Main(String[] args)
        {
            Test2 tst = new Test2();
            tst.PRINT();
        }
    }
}

마찬가지로, base 또한 선택의 문제이다. 생성자에서 사용되는 패턴도 this 와 유사하다.

부모 클래스의 생성자는 매개변수를 반드시 하나 받고

자식 클래스의 생성자는 매개변수를 받지 않는 클래스를 작성한다고 생각해보자.

using System;

namespace Project1
{
    class Test
    {
        private int index;
        Test(int index)
        {
            this.index = index;
        }
    }
    class Test2 : Test
    {
        Test2()
        {
            Console.WriteLine("자식 클래스의 생성자입니다.");
        }
    }
    class Class1
    {
        Test2 tst = new Test2();
    }
}

이 코드는 오류를 발생시킨다.

Test2를 객체를 생성했지만 생성자는 Test2의 생성자만 호출되는 것이 아니기 때문이다.

자식 클래스에서부터 자신의 부모 클래스로 생성자의 [호출]이 이루어지고,

부모 클래스에서 부터 생성자가 [실행]된다.

 

하지만 이 코드에서는 부모 클래스의 생성자가 매개변수를 반드시 하나는 받게 되어있는데, 이 매개변수가 없기 때문에

 

'index'에 해당하는 제공된 인수가 없습니다.

 

라며 오류가 생긴다.

바로 이런 경우에 base 예약어를 사용하여 어떤 생성자를 어떤 값으로 호출해야 할지 명시해서 문제를 해결할 수 있다.

using System;

namespace Project1
{
    class Test
    {
        private int index;
        protected Test(int index)
        {
            this.index = index;
        }
        public int getIndex
        {
            get { return index; }
        }

    }
    class Test2 : Test
    {
        public Test2() : base(0)
        {
            Console.WriteLine("자식 클래스의 생성자입니다.");
            int baseIndex = base.getIndex;
            Console.WriteLine(baseIndex);
        }
    }
    class Class1
    {
        static void Main(string[] args)
        {
            Test2 tst = new Test2();
        }
    }
}

this 와 사용법은 동일하다.

 

'C# > 책 정리' 카테고리의 다른 글

C# 정리 ) base 를 이용한 메서드 재사용  (0) 2021.12.01
C# 정리 ) 메서드 오버라이드  (0) 2021.12.01
C# 정리 ) this  (0) 2021.11.30
C# 정리 ) System.Array  (0) 2021.11.29
C# 정리 ) GetHashCode  (0) 2021.11.29

댓글