【问题标题】:C# Method Overriding [closed]C#方法覆盖[关闭]
【发布时间】:2014-05-23 01:49:51
【问题描述】:

一个小型工资单程序,根据员工一个月的工作小时数支付工资或金额(仅限按小时支付的员工)这是我制作的两个类图之一:

本版本使用两个子类定义两种员工,并继承Employee父类的基础属性,两个子类有自己的支付两种员工的方法。

我的另一个版本是这样的:

此版本根据支付的员工类型使用方法覆盖。

基于其他类及其关系,哪个更适合实现? 实施其中一项是否会产生重大影响?

【问题讨论】:

  • 不太确定我是否喜欢其中任何一个。为什么不创建一个带有标志的 Employee 类,告诉您他们是按小时还是受薪?这样,您只需一个 pay 方法来检查该标志并相应地调整其支付方式的计算。
  • 你的意思是方法重载吗? (第一个使用方法覆盖。)

标签: c# oop methods polymorphism overriding


【解决方案1】:

我根本不会将 Employee 子类化。我可能会将其建模为 Employee HAS a PaymentStrategy,它是 HourlyPaymentStrategy、SalaryPaymentStrategy 等的子类。

进一步解释原因:在 Java 和 C# 等静态类型语言中,对象一旦实例化就无法更改其类型。因此,使用继承,小时工永远不会成为受薪员工,而通过组合,您可以将 HourlyPaymentStrategy 实例中的 PaymentStrategy 属性替换为 SalaryPaymentStrategy。

【讨论】:

  • 非常聪明的答案.. 这也有可能将支付计算与员工分开
【解决方案2】:

另一种可能性是只有一种员工类型,但有一个薪酬类型的层次结构。

abstract class PayType
{
    public abstract decimal CalculateSalary();
}

class HourlyRate : PayType
{
}

class Salary : PayType
{
}

员工将有一个 PayType 属性。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 2022-01-23
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2010-11-16
    • 2011-11-03
    相关资源
    最近更新 更多