1. 程式人生 > >【轉】編寫高質量代碼改善C#程序的157個建議——建議99:重寫時不應使用子類參數

【轉】編寫高質量代碼改善C#程序的157個建議——建議99:重寫時不應使用子類參數

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:重寫時不應使用子類參數