using System; using System.Collections; abstract class Employee { protected Employee(int employeeId, int hoursWorked) { this.employeeId = employeeId; HoursWorked = hoursWorked; } protected int employeeId; public int EmployeeId { get { return employeeId; } } protected int HoursWorked; protected double hourlyCost = -1; // dummy init value public abstract double HourlyCost { get; } } class ContractEmployee : Employee { public ContractEmployee(int employeeId, double hourlyWage, int hoursWorked) : base(employeeId, hoursWorked) { HourlyWage = hourlyWage; } protected double HourlyWage; public override double HourlyCost { get { return HourlyWage; } } } class SalariedEmployee : Employee { public SalariedEmployee(int employeeId, double salary, int hoursWorked) : base(employeeId, hoursWorked) { Salary = salary; } protected double Salary; public override double HourlyCost { get { return (Salary / 52) / HoursWorked; } } } class OverrideProperties { public static ArrayList employees = new ArrayList(); public static void PrintEmployeesHourlyCostToCompany() { foreach (Employee employee in employees) { Console.WriteLine("{0} employee (id={1}) costs {2}" + " per hour", employee, employee.EmployeeId, employee.HourlyCost); } } public static void Main() { ContractEmployee c = new ContractEmployee(1, 50, 40); employees.Add(c); SalariedEmployee s = new SalariedEmployee(2, 100000, 65); employees.Add(s); PrintEmployeesHourlyCostToCompany(); Console.ReadLine(); } }