본문 바로가기
컴퓨터/C#

[C#] base (super)

by 아기상어  2020. 6. 2.

base

this 예약어가 클래스 인스턴스 자체를 가리키는것과 달리

base 예약어는 부모 클래스를 명시적으로 가리킨다. 

다른 언어에서 super와 같다고 보면 된다.

 

base는 상속받을 때 생성자에 인한 오류가 생길때 쓰일 수 있다.

 

    class Book
    {
        decimal isbn13;
        public Book(decimal isbn13)
        {
            this.isbn13 = isbn13;
        }
    }
    
    class EBook : Book
    {
        public EBook() // 에러 발생
        {
        
        }
    }

 

Book을 상속받아 EBook을 생성할때 Book도 생성되는데 

이미 Book에 인자 1개를 받는 생성자가 있으므로 디폴트 생성자가 생성되지 않기 때문에

생성될 때 isbn13을 초기화 시켜주는 Book클래스를 생성할 수 없으므로 컴파일 시키지 못하게 막는다.

 

    class Book
    {
        public decimal isbn13;
        public Book(decimal isbn13)
        {
            this.isbn13 = isbn13;
        }
    }
    
    class EBook : Book
    {
        decimal isbn13;
        public EBook()  :   base(0) //  Book은 인자 1개짜리 생성자가 있기때문에 자동으로 디폴트생성자가 만들어지지 않는다.
                                    //  그래서 Book을 상속받아서 실행하면 부모생성자가 생성되며 인자가 필요한데 이 역할을 할 수 있는게 base 이다.
        {
            this.isbn13 = base.isbn13;  //  변수이름이 같을 땐 this와 base로 구분한다.
        }

        public EBook(decimal isbn13)  :   base(isbn13)
        {
            isbn13 = this.isbn13;
            this.isbn13 = base.isbn13;
        }
    }

 

 

: base 형태로 쓰이며 base()로 인자를 넘겨 줄 수도 있다.

isbn13을 public으로 바꾸면 base.isbn13으로 부모클래스의 변수로 접근할 수 있다.