【轉】編寫高質量代碼改善C#程序的157個建議——建議99:重寫時不應使用子類參數
阿新 • • 發佈:2017-12-07
bsp man stat pub ati lin set 薪水 col
建議99:重寫時不應使用子類參數
重寫時,如果使用了子類參數,可能會偏離設計者的預期目標。比如,存在一個如下繼承體系:
class Employee { } class Manager : Employee { }
現在,類型ManagerSalary中的SetSalary方法重寫了Salary中的相同方法,重寫的方法采用一個子類參數:
class Salary { public void SetSalary(Employee e) { Console.WriteLine("職員被設置了薪水。"); } } class ManagerSalary : Salary { public void SetSalary(Manager m) { Console.WriteLine("經理被設置了薪水。"); } }
調用者的代碼看起來如下:
static void Main(string[] args) { ManagerSalary m = new ManagerSalary(); m.SetSalary(new Employee()); }
設計者的本意是要設置經理的薪水,可是實際調用的代碼卻是設置了員工的薪水。
輸出為:
職員被設置了薪水。
所以,在重寫時,使用子類參數有一定風險,應當避免這種設計。正確的方法應當仍舊使用Employee類型參數,這起碼能讓編譯器提醒我們要使用new關鍵字。
轉自:《編寫高質量代碼改善C#程序的157個建議》陸敏技
【轉】編寫高質量代碼改善C#程序的157個建議——建議99:重寫時不應使用子類參數