base

less than 1 minute read



base

base 예약어는 부모 클래스를 명시하는데 사용되며 생략시 부모 클래스의 멤버를 사용시 base 키워드가 생략된것이나 다름없다.

public class Parent
{
  public void ParentDo(){}
}

public class Child : Parent
{
  public void ChildDo()
  {
    base.ParentDo();
  }
}

base 예약어는 this와 마찬가지로 명시하고 안하고는 선택의 문제이며 생성자에서 사용되는 패턴도 this와 유사하다.

다음과 같이 반드시 1개의 매개변수를 생성자에게 받게 되어있는 클래스로부터 상복을 받는 자식 클래스를 정의할 때

class Bak
{
  string language;
  public Study(string language)
  {
    this.language = language;
  }
}

class CBak : Bak
{
  public CBak()
  {
    // 에러 발생
  }
}

상속 받은 자식에서 매개변수를 선언하지 않으면 컴파일시 오류가 발생한다. 그 이유는 자식 클래스의 생성은 곧 부모 클래스의 생성자를 호출한다는 의미이며 자식 클래스가 생성되는 시점에 부모 클래스의 생성자를 호출해야 하는데 이 때 부모에서 제공되는 생성자에는 매개변수가 존재하기 때문이다.

따라서 컴파일러 입장에서는 매개변수에 대한 정부를 알 수 없고 부모 클래스의 생성자가 여러 개 있는 상황이라면 어떤 생성자를 자동으로 호출해야 할지도 불분명하다.

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

class Bak
{
  ~
}

class CBak : Bak
{
  public CBak() : base(0)
  {
  }
  // or

  public CBak(string language) : base(language)
  {

  }
}