using System.Collections.Generic;
using System.Threading.Tasks;
abstract partial class Employee
public Employee(string name, int id, float pay, string ssn)
: this(name, 0, id, pay, ssn) { }
public Employee (string name, int age, int id, float pay, string ssn)
public virtual void GiveBonus(float amount)
public virtual void DisplayStats()
Console.WriteLine("Name: {0}", Name);
Console.WriteLine("ID: {0}", ID);
Console.WriteLine("Pay: {0}", Pay);
Console.WriteLine("Age: {0}", Age);
protected BenefitPackage empBenefits = new BenefitPackage();
public double GetBenefitCost()
return empBenefits.ComputePayDeduction();
public BenefitPackage Benefits
get { return empBenefits; }
set { empBenefits = value; }
public class BenefitPackage
public enum BanafitPackageLevel { Sandard, Gold, Platinum}
public double ComputePayDeduction()
protected string empName;
Console.WriteLine("Error! Name must be less than 16 characters!");
public string SocialSecurityNumber
sealed class PTSalesPerson : SalesPerson
public PTSalesPerson(string fullName, int age, int empID, float currPay, string ssn, int numbOfSales) : base (fullName, age, empID, currPay, ssn, numbOfSales)
class SalesPerson : Employee
public int SalesNumber { get; set; }
public SalesPerson(string fullName, int age, int empID, float currPay, string ssn, int numbOfSales) : base (fullName, age, empID, currPay, ssn)
SalesNumber = numbOfSales;
public override sealed void GiveBonus(float amount)
if (SalesNumber > 0 && SalesNumber <= 100)
if (SalesNumber >= 101 && SalesNumber <= 200)
base.GiveBonus(amount*salesBonus);
public override void DisplayStats()
Console.WriteLine("Number of Sales: {0}", SalesNumber);
static void Main(string[] args)
Console.WriteLine("The Employee Class Hierarchy");
SalesPerson fred = new SalesPerson();
Manager chucky = new Manager("Chucky", 50, 92, 100000, "333-23-2322", 9000);
SalesPerson fran = new SalesPerson("Fran", 43, 93, 3000, "932-32-3232", 31);
object frank = new Manager("Frank Zappa", 9, 3000, 40000, "111-11-1111", 5);
Employee moonUnit = new Manager("MoonUnit Zappa", 2, 3001, 20000, "101-11-13121", 1);
SalesPerson jill = new PTSalesPerson("Jill", 34, 3002, 100000, "111-12-1119", 90);
static void GivePromotion(Employee emp)
Console.WriteLine("{0} was promoted!", emp.Name);