게임개발 캠프 13일차

IIRU·7일 전

Abstract

클래스 앞에 abstract를 붙이면 사용가능하다.

abstract class Monster : Character
{
    // 가상함수
    public virtual void Attack()
    {
        //원본이 존재, 구현하지 않아도 원본이 있음.
    }
    // 추상함수
    public abstract void DropExp();
}

abstract로 정의된 함수는 자식클래스에서 반드시 정의를 해주어야한다.

 class Slime : Monster
 {
     public override void Attack()
     {

     }
     public override void DropExp() { 
     
     }
     
 }

override해서 자식클래스에서 함수를 만들 수 있다.

업캐스팅

Slime slime = new Slime();
Goblin goblin = new Goblin();
Orc orc = new Orc();
Monster[] monster = new Monster[3];
monster[0] = slime;
monster[1] = goblin;
monster[2] = orc;

Monster클래스로 선언된 monster에 자식클래스로 선언된 slime과 goblin, orc를 업캐스팅해서 넣어주었음.

다운캐스팅

Character ch = new Player();
Player p = (Player)ch;

ch가 자식클래스인 Player클래스로 만들어져있다.

is

 //1번 방법
 if(ch is Monster m)
 {
     Console.WriteLine("다운캐스팅 성공!");
 }
 else
 {
     Console.WriteLine("다운캐스팅 실패!");
 }

ch가 지금 player로 만들어졌기 때문에 monster가 아니라서 다운캐스팅이 실패한다.

as

Monster m1 = ch as Monster;

ch가 monster라면 m1에 대입. 아니라면 null이 들어감.

profile
초보 개발자 블로그입니다!

0개의 댓글