오버라이드 & base
오버라이드란?
사전에서 오버라이드를 찾아보면 덮어쓰기!!
즉 기존 것의 데이터를 새로운 데이터로 덮어쓰는 개념입니다.
부모 클래스
.
. 상속관계
.
자식 클래스
위와 같은 상속관계의 경우 부모클래스의 변수와 함수를
자식이 재정의 하여 사용할 수 있다.
이런 경우 자식클래스에서 부모클래스를 오버라이드 한다고 한다.
그러면 c#에서는 과연 오버라이드를 어떤 방식으로 할 것인가!
변수 : public new int x = 0;
함수 : public new void TEST(int a)
이와 같이 new라는 키워드를 사용하면 기존 변수와 함수를 오버라이드 하게 된다.
ex)
class Base
{
public int x = 10
public void SetData(int i)
{
}
}
class Derived : Base
{
public new int x = 100;
public new void SetData(int i)
{
}
}
여기서 중요한 점은 기존 것을 덮어쓰는 거기 때문에 함수의 경우
반환값과 매개변수의 수가 똑같아야 한다는 점이다.
base변수
그럼 여기서 우리는 하나의 의문을 접하게 된다.
만약 상속 받은 클래스에서 부모 클래스의 변수를 사용하고 싶을때는 어떻게 하는가!
여기서 사용하는 base 키워드이다.
위의 예시에서 Derived 클래스에서 x라는 변수를 사용하면 100을 출력한다.
하지만 base.x라는 변수를 사용하면 10을 출력한다.
즉 base를 사용하면 부모 클래스를 사용하게 되는 것이다.
여기서 base는 해당 클래스의 생성자를 수행하고 부모 클래스의 생성자를 수행하라는 의미이다.
class Derived : Base
{
public Derived() : base()
{
}
}
위와같은 선언은 Base 클래스의 생성자를 수행한 후
Derived 클래스의 생성자를 사용하라는 의미이다.
자식 클래스 사용 시 부모 클래스의 생성자를 호출하고 싶은 경우
위와 같이 사용하면 된다.