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塊。
全站熱搜
留言列表