c# 多態實現_虛方法
阿新 • • 發佈:2017-11-07
write line ons lin nbsp lba clas blog class 例如: 員工9點打卡,經理10點打卡,董事長11點打卡; 這幾個類共同的父類是員工類,它們都要完成打卡這件事情。
實現方法: 虛方法, 抽象類, 接口
1、虛方法
將父類的方法標記為虛方法,使用關鍵字virtual,這個方法可以被子類重新寫一遍。
在父類的方法前面加上一個virtual,在子類的方法前面加上一個override;如果子類的方法前面不加override,編譯器不會報錯,但這樣的話,就無法通過父類來調用子類的方法,因為這個方法成了子類的獨有的方法,只是名字與父類相同而已,與父類無關。
註意:如果需要對父類的方法進行重寫的話,一定要在子類的方法面前加上overrie進行修飾。
什麽時候使用:幾個類可以提取出一個共同的父類,它們都要完成相同的事情,而且這個父類可以被實例化。
public class Employee { public virtual void DaKa() { Console.WriteLine("九點打卡"); } } public class Manager : Employee { public override void DaKa() { Console.WriteLine("經理10點打卡"); } } public class Chairman : Employee { public override void DaKa() { Console.WriteLine("董事長11點打卡"); } }
Employee emp = new Employee(); Manager mg = new Manager(); Chariman cm = new Chariman(); Employee[] emps = { emp, mg,cm }; for (int i = 0; i < emps.Length; i++) { emps[i].DaKa(); } Console.ReadKey();
emps[i].DaKa(); 調用的依然是父類的方法 DaKa(),只不過該方法已經被子類重寫了。具體調用哪一個子類的DaKa()方法,取決於emp[i]裏面裝的是哪一個的子類對象。
上面的代碼也體現了裏氏轉換原則,子類可以被賦值給父類。通過共同的父類,取消了各個子類之間的差異性。
2、使用虛方法需要註意的幾點:
1)父類中如果有方法需要讓子類重寫,則可以將該方法標記為virtual
2)虛方法在父類中必須有實現,哪怕是空實現
3)虛方法子類可以重寫(override),也可以不重寫
c# 多態實現_虛方法