Menu
CoddyTech

回顾:员工层级结构

本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 24 课,共 70 课。

challenge icon

挑战

简单

让我们构建一个员工层级系统,综合运用本章介绍的所有继承概念。你将创建一个公司结构,其中不同类型的员工共享常见属性,但奖金的计算方式各不相同。

你将把代码分布在 4 个文件中:

  • Employee.cs:在 Company 命名空间中定义基类 Employee。每位员工都有一个 Name(字符串)和一个 Salary(十进制数)。创建一个接受这两个值的构造函数。添加一个名为 CalculateBonus() 的 virtual 方法,默认返回工资的 10%。重写 ToString(),使其返回 "{Name} - ${Salary}"。
  • Manager.cs:在 Company 命名空间中定义一个继承自 Employee 的 Manager 类。经理还有一个额外的 TeamSize 属性(整数)。构造函数应接受姓名、工资和团队人数,并使用 base 初始化父类。重写 CalculateBonus(),使其返回工资的 15% 加上团队中每位成员 50 美元的奖金。重写 ToString(),使其返回 "{Name} - ${Salary} (Manager, Team: {TeamSize})"。
  • Developer.cs:在 Company 命名空间中定义一个继承自 Employee 的 Developer 类。开发人员有一个 ProgrammingLanguage 属性(字符串)。构造函数接受姓名、工资和编程语言。重写 CalculateBonus(),使其返回工资的 12%。重写 ToString(),使其返回 "{Name} - ${Salary} (Developer, {ProgrammingLanguage})"。
  • Program.cs:在主文件中,使用输入值为每种员工类型各创建一个实例。将这三名员工都存储在一个由 Employee 引用组成的数组中,以展示多态。遍历数组,输出每位员工的 ToString() 结果,然后输出其奖金。

你将收到 8 个输入:

  • 普通员工姓名
  • 普通员工工资
  • 经理姓名
  • 经理工资
  • 经理团队人数
  • 开发人员姓名
  • 开发人员工资
  • 开发人员使用的编程语言

按照以下格式输出每位员工的信息和奖金:

{ToString result}
Bonus: ${CalculateBonus result}

例如,如果输入依次为 John、50000、Sarah、80000、5、Mike、70000 和 C#,输出应为:

John - $50000
Bonus: $5000
Sarah - $80000 (Manager, Team: 5)
Bonus: $12250
Mike - $70000 (Developer, C#)
Bonus: $8400

注意,每种员工类型的奖金计算方式都不同,但你仍然可以通过一个 Employee 数组统一处理他们。这就是将继承与多态结合起来的强大之处!

亲手试试

using System;
using Company;

class Program
{
    public static void Main(string[] args)
    {
        // 读取普通员工的输入
        string empName = Console.ReadLine();
        decimal empSalary = Convert.ToDecimal(Console.ReadLine());
        
        // 读取经理的输入
        string mgrName = Console.ReadLine();
        decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
        int teamSize = Convert.ToInt32(Console.ReadLine());
        
        // 读取开发人员的输入
        string devName = Console.ReadLine();
        decimal devSalary = Convert.ToDecimal(Console.ReadLine());
        string progLang = Console.ReadLine();
        
        // TODO:创建一个 Employee、一个 Manager 和一个 Developer
        
        // TODO:将这三个对象存入 Employee 数组,以展示多态
        
        // TODO:遍历数组,打印每位员工的 ToString() 结果和奖金
        // 格式:
        // {ToString 结果}
        // 奖金:${CalculateBonus 结果}
    }
}

面向对象编程中的所有课

自己练习: C# 在线编译器