建议99:重写时不应使用子类参数
来源:互联网 发布:黑页源码带音乐 编辑:程序博客网 时间:2024/05/18 18:41
建议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个建议》陆敏技
0 0
- 建议99:重写时不应使用子类参数
- 子类重写和覆盖
- Java调用子类重写方法
- Object类以及子类的toString()方法的使用及重写
- 在父类构造器中使用子类中被重写的方法
- 2015.11.10 ,Demo7 ,构造函数 ,重载 ,子类的重写,this关键字的使用,继承
- 建议12: 重写Equals时也要重写GetHashCode
- 子类函数使用父类类型做为参数时,调用该参数的protected变量问题
- C#下 子类继承父类的虚方法后 使用override重写父类方法 和 不使用override重写有什么区别?
- 子类重写父类的构造函数
- JAVA 子类重写父类的总结
- java 子类重写父类的方法
- 重写子类中的赋值操作符
- 重写子类中的赋值操作符
- 子类重写父类注意事项 java
- java 子类重写父类的方法
- java 子类继承父类 -- 重写、覆盖
- 子类重写父类注意事项 java
- XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习
- oracle数据库,使用jdbc解析注释出现的问题
- 隐藏键盘和显示键盘
- mktime()的格式
- XML——XML文件约束之DTD详解
- 建议99:重写时不应使用子类参数
- Win10系统触摸屏自带驱动安装步骤
- Oracle的启动问题
- Java Web项目中解决中文乱码方法总结
- 开发中常见问题集锦
- 数制转换问题
- Eclipse+ADT+Android SDK搭建安卓开发环境
- android webview用法小结1
- oracle 数据库的 预定义角色 有哪些?