本文探讨了在C#中通过继承和多态实现员工类(Employee)、经理类(Manager)、技术人员类(Technician)以及销售人员类(Sales)的设计,展示了面向对象编程的灵活性与效率。
某公司雇员包括经理(Manager)、技术人员(Technician)和销售员(Salesman)。开发部经理既是经理也是技术人员;而销售部经理则是同时具备经理与销售员身份的角色。
以Employee类为虚基类,派生出Manager、Technician 和 Salesman 类,并进一步派生出Developermanager和Salesmanager类。其中Employee类包含姓名、职工号、工资级别以及月薪(实发基本工资加业绩工资)等属性;同时具有计算月薪的函数pay()。
此函数需要输入请假天数,扣除相应的应扣工资后得出实发的基本工资。
Technician 类在此基础上新增了每小时附加酬金和当月工作时长及研究完成进度系数作为额外特性。其业绩工资由这三个值相乘得到,并且也具有同名的pay()函数来计算总薪资(基本工资加业绩工资)。
Salesman类则增加了当月销售额与提成比例为该角色特有的属性,业绩工资即为其销售额与其提取百分比之积;同样地,此类型也有一个用于核算总薪酬的pay()方法。
Manager 类包含固定奖金额和绩效系数作为其独有的特性。其计算出来的业绩工资是上述两项相乘的结果,并且如其他类一样具有同名的 pay 方法来得出总的薪水(基本工资加上业绩工资)。
对于DeveloperManager,其实现方式为将经理身份与技术人员角色产生的业绩工资总和的一半确定为其最终的业绩报酬。
而SalesManager 类中,则是以固定奖金额一半加上部门总销售额与其提成比例之积作为其业绩工资;同理,该类也通过 pay() 方法来计算总的薪酬。
编程实现这一套复杂的薪资管理体系时需特别注意pay()函数定义与调用的方式:首先采用重载技术覆盖父类的方法,然后利用运行时多态性进行具体操作。