C#方法覆盖

时间:2014-04-09 17:23:12

标签: c# oop methods polymorphism method-overriding

小额工资计划,根据员工一个月内工作的小时数向员工支付工资或金额(仅限小时工资员工)以下是我制作的两个班级图表之一:

Class Diagram 1

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

我的其他版本看起来像这样:

Class Diagram 2

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

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

2 个答案:

答案 0 :(得分:3)

我根本不会将Employee子类化。我可能会将其建模为Employee HAS为PaymentStrategy,其中包含HourlyPaymentStrategy,SalaryPaymentStrategy等子类。

扩展原因:在Java和C#等静态类型语言中,对象在实例化后无法更改其类型。因此,使用继承,每小时员工永远不会成为受薪员工,而使用组合,您可以使用SalaryPaymentStrategy从HourlyPaymentStrategy实例替换他的PaymentStrategy属性。

答案 1 :(得分:1)

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

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

class HourlyRate : PayType
{
}

class Salary : PayType
{
}

员工将拥有PayType属性。