프로그래밍언어/C#
20200214[C#] 상속된 멤버 숨기기
HJH0825
2020. 2. 14. 09:18
상속된 멤버 숨기기
클래스 상속을 하다보면, 부모클래스와 자식클래스에 동일한 멤버가 존재할 수 있다. (근데 되도록 이름을 다르게 지정하는게 좋다고 판단된다. 아무래도 헷갈릴수 있기 때문에)
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'수정를 쓴 함수를 숨겨준다.