CH.개인기록 노트

C#은 처음이라

C# 가상함수

amckdgjs 2024. 3. 6. 16:51

가상함수?

  • 가상함수는 기본 클래스에서 파생된 클래스에 재정의(Override)될 수 있는 함수이다.
  • 가상함수를 통해 다형성을 구현할 수 있다.

C#에서는 'virtual' 키워드를 사용하여 선언된다.기본 클래스에서 가상함수를 선언하면 파생 클래스에서 이를 재정의 할 수 있다.

class Shape
{
    public virtual void Draw()//가상함수 선언
    {
        Console.WriteLine("도형을 그립니다.");
    }
}

class Circle : Shape
{
    public override void Draw()//override로 재정의
    {
        Console.WriteLine("원을 그립니다.");
    }
}

'override'는 자식 클래스 앞에 선언된다.부모로부터 상속받은 함수와는 다르게 구현한다는 의미를 가지고있다.

재정의되는 함수는 부모의 함수와 이름이 일치해야 한다.

    class Skill
    {
        public virtual void Excute()//가상함수
        {
            Console.WriteLine("스킬 재사용 대기시간");
        }
    }
    class FireBall : Skill
    {
        public override void Excute()//오버라이딩
        {
            base.Excute();
            Console.WriteLine("화염구 발사");
        }
    }
    class Dash : Skill 
    {
        public override void Excute()//오버라이딩
        {
            
            Console.WriteLine("돌진공격");
        }
        
    }
    static void Test()
    {
        Skill fireball = new FireBall();
        fireball.Excute();//fireball에 있는 Excute()

        Skill dash  = new Dash();
        dash.Excute();//dash에 있는 Excute()
    }
    class Player
    {
        Skill skill;

        public void SetSkill(Skill skill)
        {
                this.skill= skill;
        }
        public void UseSkill()
        {
            skill.Excute();
        }
        }
    
    static void Main(string[] args)
    {
   
    Player player = new Player();
    Skill fire = new FireBall();
    player.SetSkill(fire);
    player.UseSkill();
    }
}
스킬 재사용 대기시간
화염구 발사

 

'C#은 처음이라' 카테고리의 다른 글

C# 일반화(Generic)  (1) 2024.03.08
C# 문자열(string)  (0) 2024.03.07
C# 추상화(Abstract)  (0) 2024.03.06
C# 배열 활용  (0) 2024.03.06
C# 캡슐화  (0) 2024.03.06