부모 클래스에 접근하는 "base"

강성원·2023년 11월 30일
0

C# 끄적끄적

목록 보기
6/11

부모 생성자 호출에 사용

자식 생성자에서 부모의 생성자를 명시적으로 호출할 때 base 키워드를 사용한다.

class Player
{
    public Player()
    {
        Console.WriteLine("부모의 생성자 호출");
    }

    static public int counter = 1;
    public int id;
    public int hp;
    public int attack;
}

class Knight : Player
{
    public Knight() : base()
    {
        Console.WriteLine("기사의 생성자 호출");
    }
    ,,,
}

부모의 생성자 호출
기사의 생성자 호출

인자를 필요로 하는 부모 생성자도 명시해줄 수 있다.

class Player
{
    public Player(int _hp)
    {
        Console.WriteLine("부모의 생성자 호출");
    }
}

class Knight : Player
{
    public Knight() : base(10)
    {
        Console.WriteLine("기사의 생성자 호출");
    }
    ,,,
}

base와 this

base와 this가 같은 영역을 가리킬 때

class Player
{
    public Player(int _hp)
    {
        Console.WriteLine("부모의 생성자 호출");
        hp = _hp;
    }

    static public int counter = 1;
    public int id;
    public int hp;
    public int attack;
}
class Knight : Player
{
    public Knight() : base(10)
    {
        Console.WriteLine("기사의 생성자 호출");
        int i = base.hp; // 부모의 hp 가리킨다.
        int j = this.hp; // 부모의 hp 가리킨다.
    }
}
  • 위와 같이 부모만 "hp" 변수를 가지고 있을 경우 base와 this가 같은 hp를 가리킨다.

base와 this가 다른 영역을 가리킬 때

class Player
{
    public Player(int _hp)
    {
        Console.WriteLine("부모의 생성자 호출");
        hp = _hp;
    }

    static public int counter = 1;
    public int id;
    public int hp;
    public int attack;
}
class Knight : Player
{
	int hp; // 부모와 동일한 자료형, 이름의 변수가 있다.
    
    public Knight() : base(10)
    {
        Console.WriteLine("기사의 생성자 호출");
        int i = base.hp; // 부모의 hp 가리킨다.
        int j = this.hp; // 자신의 hp 가리킨다.
    }
}
  • 이건 정말 안좋은 상황이지만 이렇게 같은 자료형, 같은 이름의 변수가 부모와 자식이 둘 다 가진 경우가 있다고 하자.

  • 이런 경우에는
    base.hp가 부모의 hp를 가리키고
    this.hp가 자신의 hp를 가리킨다.

profile
개발은삼순이발

0개의 댓글