inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

클래스 형식 변환

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

해결된 질문

262

astrape

작성한 질문수 23

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값도 같이 넘어가게되는건가요..?

C#

답변 2

0

astrape

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

빠른 답변 감사드립니다

0

Rookiss

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

위 그림 참조 바랍니다.

Generic에 대한 질문 있습니다.

0

97

2

2022 버전에 커뮤니티 버전이 없는데 2026 버전으로 해도 무관?

0

203

2

다형성 캐시 문제

0

113

3

.

0

71

1

프로퍼티 강의 질문 있습니다.

0

79

1

이후 커리 질문

0

86

1

static

0

91

2

강의에는 새로운 클래스 파일을 생성하면...

0

72

1

생성자의 이름 선언

0

65

1

9:03 Divide(10 , 3) 부분 질문입니다

0

88

1

깃허브 관련 질문 있습니다.

0

239

1

비쥬얼 스튜디오 업데이트가 된건가요..? 매개변수 오류 관련 질문

0

249

1

C# 시리즈 || C++ 시리즈 자료구조 강의에 대한 질문입니다!

0

306

2

Activator 질문있습니다

0

333

1

이넘 타임 선언 질문

0

348

1

Sort 오름차순, 내림차순

0

323

1

질문 있습니다.

0

250

1

팩토리얼 문제

0

271

1

Sort함수 질문있습니다.

0

266

1

다형성 함수 질문 있습니다.

0

221

1

질문이 있습니다.

0

229

1

섹션2 연습문제 질문입니다.

0

215

1

안녕하세요~서버에 대해 질문이 있습니다.

1

284

1

텍스트 색깔이 제 편집기와 달라서 수강에 어려움이 있습니다ㅜㅜ

0

397

1