overider 用在繼承物件後,將父物件的方法、屬性、索引子或事件加以實作或是複寫。

以下範例抄襲MSDN

   1: public class Employee
   2: {
   3:     public string name; 
   4:     protected decimal basepay;
   5:  
   6:    public Employee(string name, decimal basepay)
   7:     {
   8:         this.name = name;
   9:         this.basepay = basepay;
  10:     }
  11:  
  12:   public virtual decimal CalculatePay()  
  13:          //virtual這字眼是說自己的這個東西(方法、屬性等等的)被誰繼承去之後,可以給改寫或蹂躪的
  14:     {
  15:         return basepay;
  16:     }
  17: }
   1: public class SalesEmployee : Employee   //繼承父物件Employee
   2: {
   3:  
   4:     private decimal salesbonus;
   5:  
   6:     public SalesEmployee(string name, decimal basepay, decimal salesbonus)
   7:               : base(name, basepay)
   8:  //子物件初始化函數呼叫時同時也是要一起呼叫父物件一起初始化
   9:     {
  10:         this.salesbonus = salesbonus;
  11:     }
  12:  
  13:    public override decimal CalculatePay()
  14:   //父物件的CalculatePay方法說是可以被複寫(virtual),所以在子物件中改寫一下這個函數
  15:     {
  16:        return basepay + salesbonus;
  17:     }
  18: }


所以new一個Employee物件(父物件)

Employee employee2 = new Employee("Bob", 1200);

還有new一個SalesEmployee物件(子物件)

SalesEmployee employee1 = new SalesEmployee("Alice", 1000, 500);

同樣都是呼叫CalculatePay(),但是子物件已經改寫了CalculatePay(),所以就會有不同的結果,

當然如果子物件不複寫,那就是使用父物件最初衷的那些東西(方法、屬性等等),

以上如果子物件複寫CalculatePay(),Alice會拿到1500塊,但是如果沒有複寫,那就是只能拿到1000塊。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 baechang 的頭像
    baechang

    翁百璋與大泡泡的奇幻旅程

    baechang 發表在 痞客邦 留言(0) 人氣()