编写高质量代码改善C#程序的157个建议——建议99:重写时不应使用子类参数
2024-08-25 02:08:51
建议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个建议》陆敏技
最新文章
- [LeetCode] Largest BST Subtree 最大的二分搜索子树
- ASP.NET里的Session详细解释
- 使用RDCMan管理SharePoint虚拟机的重复要求验证的问题
- [整] Android Fragment 生命周期图
- 面试题_31_to_47_JVM 底层与GC(Garbage Collection)的面试问题
- HDU 5742 It's All In The Mind
- Elasticsearch集群搭建
- 【前端学习】【CSS选择器】
- SpringMVC日期参数自动绑定
- JSF学习四 标签
- debian7 安装配置
- N个元素的集合划分成互斥的两个子集的数目
- ExtJs006类别名、备用名
- Java 编程 订单、支付、退款、发货、退货等编号主动生成类
- SpringMvc(4-1)Spring MVC 中的 forward 和 redirect
- 集合框架之Collections静态工具类
- java.lang.ClassNotFoundException: org.I0Itec.zkclient.IZkStateListener异常解决
- IDEA开发环境配置
- ionic3 生成android 如何控制versionCode版本号
- ReactNative学习笔记(四)热更新和增量更新