C# 多型 (polymorphism)

  • 4412
  • 0
  • C#
  • 2017-09-29

C# 多型與多載

起初聽到多型時,心裡有一百個問號想說到底什麼叫做 "多型"

但其實簡單來說他就是一個虛擬的方法,並且在設定真實方法中去覆蓋他

其實 多型繼承 息息相關,繼承了父類別的方法並且覆寫成新的方法

例如 : 我們在設計遊戲時,每個角色都有技能、血量(HP)、MP等,我們可以先寫個虛擬的技能、HP、MP 再根據每個角色去覆寫這些方法

 class polymorphism
    {
        static void Main(string[] args)
        {
            Warrior w = new Warrior();
            w.activeSkill();
            w.blood();
        }        
    }

    public class BaseSkill
    {
        public virtual void activeSkill()
        {
            Console.WriteLine("沒有技能");
        }
        public virtual void blood()
        {
            Console.WriteLine("HP : 50");
        }
    }

    public class Warrior : BaseSkill
    {
        public override void activeSkill()
        {
            Console.WriteLine("殺殺殺技能");
        }
        public override void blood()
        {
            Console.WriteLine("HP : 150");
        }
    }

從上方的程式碼中,BaseSkill便是指大家都擁有的一些功能,例如 技能 跟 HP,這些虛擬的方法請記得加上 virtual  等同於java的 abstract 

warrior 繼承了這個方法後便可以去覆寫原先的功能,如同輸出所顯示的


在其他網站中,有看到有人說多載與多型很容易搞混,在這就順便寫一下多載

其實多載是指相同的方法但是有可能所帶入的參數不同,有的代入 int 或是string 

class Class1
{
  public void main(string[] args)
  {
     sample();
     sample(10);
  }
  void sample()
  {

  } 
  void sample(int i)
  {

  }
  void sample(string s)
  {

  }
}

參考資料:

1. Weight遊戲作家

2.攻城獅跳火圈