상속된 멤버 숨기기
클래스 상속을 하다보면, 부모클래스와 자식클래스에 동일한 멤버가 존재할 수 있다. (근데 되도록 이름을 다르게 지정하는게 좋다고 판단된다. 아무래도 헷갈릴수 있기 때문에)
public class A
{
public int Counter = 1;
}
public class B : A
{
public int Counter = 2;
}
똑똑한 비쥬얼스튜디오는 'new' 키워드를 이용하라고 제시한다.
여기서 사용하는 'new'는 new연산자와 다르다.
new 키워드를 쓰나 안쓰나 똑같이 b.Counter는 b의 Counter = 2를 출력한다. 'new' 단지 컴파일러가 멤버 숨기기에 관한 경고를 내지 않게 만들고, 다른 프로그래머들에게 의도적인 것임을 알려주는 수단이라고 할 수 있다.
new와 override
public class BaseClass
{
public virtual void Foo()
{
Console.WriteLine("BaseClass");
}
}
public class Overrider : BaseClass
{
public override void Foo()
{
Console.WriteLine("Overrider.Foo");
}
}
public class Hider : BaseClass
{
public new void Foo()
{
Console.WriteLine("Hider.Foo");
}
}
static void Main(string[] args)
{
Overrider over = new Overrider();
BaseClass b1 = over; //상향캐스팅
over.Foo(); // Overrider.Foo
b1.Foo(); // Overrider.Foo
Hider h = new Hider();
BaseClass b2 = h;
h.Foo(); //Hider.Foo
b2.Foo(); //Hider.Foo
}
출력
부모클래스와 자식클래스의 함수명이 같게되면 'new'수정를 쓴 함수를 숨겨준다.
'프로그래밍언어 > C#' 카테고리의 다른 글
20200218[C#] Object형식, 박싱 언박싱 (0) | 2020.02.18 |
---|---|
20200217[C#] 생성자와 상속 (0) | 2020.02.17 |
20200213[C#] 캐스팅과 참조 변환 (상향 캐스팅, 하향 캐스팅), as 연산자 (0) | 2020.02.13 |
20200212[C#] 소멸자 ,nameof연산자 (0) | 2020.02.12 |
20200211[C#]객체 초기치 대 선택적 매개변수, 식 본문 속성=>, 정적생성자 (0) | 2020.02.11 |