상속된 멤버 숨기기

클래스 상속을 하다보면, 부모클래스와 자식클래스에 동일한 멤버가 존재할 수 있다. (근데 되도록 이름을 다르게 지정하는게 좋다고 판단된다. 아무래도 헷갈릴수 있기 때문에)

        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'수정를 쓴 함수를 숨겨준다. 

반응형

+ Recent posts