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();
}
}
|