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塊。
文章標籤
全站熱搜
