zoukankan      html  css  js  c++  java
  • 编写高质量代码改善C#程序的157个建议——建议99:重写时不应使用子类参数

    建议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个建议》陆敏技

  • 相关阅读:
    组装query,query汇总,query字段
    POJ 1276, Cash Machine
    POJ 1129, Channel Allocation
    POJ 2531, Network Saboteur
    POJ 1837, Balance
    POJ 3278, Catch That Cow
    POJ 2676, Sudoku
    POJ 3126, Prime Path
    POJ 3414, Pots
    POJ 1426, Find The Multiple
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4745528.html
Copyright © 2011-2022 走看看