• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

클래스 형식 변환 강의에서 궁금한점이 있습니다

20.11.05 13:21 작성 조회수 163

2

    class Player

    {

        protected int hp;

        protected int attack;

    }

    class Mage : Player

    {

        public int mp;

    }

    class Program

    {

        static void EnterGame(Player player)

        {

            Mage mage = (player as Mage);

            if (mage != null)

            {

                mage.mp = 10;

            }

        }

        static void Main(string[] args)

        {

            Mage mage = new Mage();

            mage.mp = 100;

            EnterGame(mage);

        }

    }

해당 코드에서 EnterGame(mage)로 Mage 클래스를 넘겼지만 받아주는 함수 static void EnterGame(Player player)에서 Player 형식으로 받는다면 Mage 클래스에만 있는 int mp 변수는 없어질것 같은데 디버깅을 해보니 mp 변수와 안의 값도 모두 넘어가는걸로 확인이 되던데 어떤 원리로 mp값도 같이 넘어가게되는건가요..?

답변 2

·

답변을 작성해보세요.

0

astrape님의 프로필

astrape

질문자

2020.11.05

아 감사합니다 그림이랑 주소값 참조라고 얘기해주시니 한번에 이해가 되는것 같네요 ㅎㅎ

빠른 답변 감사드립니다

0

참조값은 힙에 있는 원본 객체 데이터를 건드리지 않고
단지 그 주소값을 참조하고 있는 것입니다.
데이터는 변하지 않았는데,
해당 위치에 데이터를 Player로 분석할지,
아니면 Mage로 분석할지만 바뀌고 있기 때문에
Mage를 Player로 넘겨주더라도 데이터가 날라가는 것은 아닙니다.
그래서 원래 Mage로 만든 객체를 Player로 참조하다가, 도로 Mage로 캐스팅하면 mp에도 접근 가능한거죠.

위 그림 참조 바랍니다.