[C#] 상속성

Yerin·2022년 1월 18일
0

해당 글은 <C#과 유니티로 만드는 MMORPG 게임 개발 시리즈> 강의를 정리한 글입니다.

중복되는 데이터들을 객체마다 추가하는 것은 비효율적 ❗
ex) 종류가 수백가지이상이 되는 몬스터의 경우 😖

💡 이러한 경우에 사용하게 되는 개념이 상속이다.

사용 예시

 class Player // 부모 or 기반 클래스
    {
        static public int counter = 1;
        public int id;
        public int hp;
        public int attack;

        public Player()
        {
            Console.WriteLine("Player 생성자 호출!");
        }
    }

  class Knight : Player // 자식 or 파생 클래스
    {

        static public Knight CreatKnight()
        {
            Knight knight = new Knight();
            knight.hp = 100;
            knight.attack = 1;
            return knight;
        }

        public Knight(){
            
            Console.WriteLine("Knight 생성자 호출!");
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            Knight knight = Knight.CreatKnight();
           
        }
    }

결과

Player 생성자 호출!
Knight 생성자 호출!

부모 클래스의 기본 생성자가 아닌 생성자 호출하기

 class Player // 부모 or 기반 클래스
    {
        static public int counter = 1;
        public int id;
        public int hp;
        public int attack;

        public Player()
        {
            Console.WriteLine("Player 생성자 호출!");
        }
        
         public Player(int hp)
        {
            Console.WriteLine("Player hp 생성자 호출!");
        }
    }

 class Knight : Player // 자식 or 파생 클래스
    {

        static public Knight CreatKnight()
        {
            Knight knight = new Knight();
            knight.hp = 100;
            knight.attack = 1;
            return knight;
        }

        public Knight() : base(100)
        {
            base.hp = 100; // 부모 클래스의 변수 접근
            Console.WriteLine("Knight 생성자 호출!");
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            Knight knight = Knight.CreatKnight();
           
        }
    }

결과

Player hp 생성자 호출!
Knight 생성자 호출!

부모 클래스의 속성과 기능을 자식 클래스가 이어받아 사용할 수 있다.

class Player // 부모 or 기반 클래스
    {
        static public int counter = 1;
        public int id;
        public int hp;
        public int attack;
        public void Move()
        {
            Console.WriteLine("Player Move");
        }

        public void Attack()
        {
            Console.WriteLine("Player Attack");
        }

    }
    
class Knight : Player // 자식 or 파생 클래스
    {     
        
    }
class Program
    {
  
     static void Main(string[] args)
        {
            Knight knight = new Knight();
            knight.Move();
           
        }
    }

클래스 형식 변환

Player (부모 클래스), Mage (자식 클래스)
Mage 타입 -> Player 타입 ⭕
Player 타입 -> Mage 타입 ❓

확인하는 방법

 static void EnterGame(Player player)
        {
            bool isMage = (player is Mage); //1.
            if (isMage)
            {
                Mage mage = (Mage)player;
                mage.mp = 10;
            }

            Mage mage = (player as Mage); //2.
            if (mage != null)
            {
                mage.mp = 10;
            }
        }
   static void Main(string[] args)
        {
            Knight knight = new Knight();
            Mage mage = new Mage();

            //Mage 타입 -> Player 타입
            //Player 타입 -> Mage 타입 ?
            Player magePlayer = mage;
            Mage mage2 = (Mage)magePlayer;

            EnterGame(knight);
            EnterGame(mage);
        }
profile
재밌는 코딩 공부

0개의 댓글