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으로 부모클래스의 변수로 접근할 수 있다.
'컴퓨터 > C#' 카테고리의 다른 글
[C#] 클래스 간의 형변환(implicit, explicit), 추상 클래스, 추상 메서드, 델리게이트 (0) | 2020.06.04 |
---|---|
[C#] 다형성.메서드 오버라이드 (0) | 2020.06.03 |
[C#] this (0) | 2020.06.02 |
[C#] Array 타입 (0) | 2020.06.02 |
[C#] Object 타입 (0) | 2020.06.02 |