# C#作業 - Virtual Method
```csharp=
using System;
using System.Collections.Generic;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
List<Person> employees = new List<Person>();
{
var one = new Person()
{
Name = "SiHyuk",
Gender = true,
};
employees.Add(one);
var two = new Employee()
{
Name = "SeokJin",
Gender = true,
BadgeNumber = "B001",
Salary = 55000,
};
employees.Add(two);
var three = new Sales()
{
Name = "NamJoon",
Gender = true,
BadgeNumber = "B004",
Salary = 55000,
Bonus = 6500
};
employees.Add(three);
var four = new Engineer()
{
Name = "YoonGi",
Gender = true,
BadgeNumber = "B002",
Salary = 65000,
OverTimePay = 20000
};
employees.Add(four);
var six = new Cleaner()
{
Name = "Yiyier",
Gender = false,
BadgeNumber = "A613",
Salary = 40000
};
employees.Add(six);
var five = new Manager(new Employee[] { four, six })
{
Name = "Taehyung",
Gender = true,
BadgeNumber = "B006",
Salary = 57000
};
employees.Add(five);
}
foreach (Person item in employees)
{
Console.WriteLine(item.GetDescription());
Console.WriteLine();
};
}
}
class Person
{
public string Name { get; set; }
public bool Gender { get; set; }
public virtual string GetDescription()
{
return $"姓名:{Name}\n性別:{(Gender ? "男" : "女")} ";
}
}
class Employee : Person
{
public string BadgeNumber { get; set; }
public int Salary { get; set; }
public override string GetDescription()
{
return $"姓名:{Name}\n性別:{(Gender ? "男" : "女")}\n員工編號:{BadgeNumber}\n薪資:{CalcTotalSalary()} ";
}
public virtual int CalcTotalSalary() => Salary;
}
class Engineer : Employee
{
public int OverTimePay { get; set; }
public override int CalcTotalSalary() => Salary + OverTimePay;
}
class Sales : Employee
{
public int Bonus { get; set; }
public override int CalcTotalSalary() => Salary + Bonus;
}
class Manager : Employee
{
public int LeaderBonus { get; set; }
public Employee[] TeamMember { get; set; }
public Manager(Employee[] teamMember) // 傳入其他類別的陣列
{
this.TeamMember = teamMember;
LeaderBonus = TeamMember.Length * 10000;
}
public override int CalcTotalSalary() => Salary + LeaderBonus;
}
class Cleaner : Employee
{
}
}
```
偷懶沒訂計算 OverTimePay和 Bonus的方法
以後有心力再補上 :cry:
###### tags: `C#` `作業`