using System.Collections.Generic;
using System.Collections.ObjectModel;
public static void Main()
var org = new Organization();
var employees = org.GetEmployees();
for (int i =0; i<employees.Count; i++)
Console.WriteLine("Employee Type: {0}", v.GetType().Name);
if (v.GetType().Name == "SalariedEmployee")
Console.WriteLine("Salaried Employee Computer: {0}", ((SalariedEmployee)v).Computer);
public class Organization
private IList<Employee> _employees = new List<Employee>();
private void LoadEmployeeList()
Random random = new Random();
for (int i = 0; i < 100; i++)
int randomNumber = random.Next(3);
_employees.Add(new HourlyEmployee());
_employees.Add(new SalariedEmployee(new DesktopComputer()));
_employees.Add(new SalariedEmployee(new LaptopComputer()));
public ReadOnlyCollection<Employee> GetEmployees()
return new ReadOnlyCollection<Employee>(_employees);
public abstract class Employee
public class HourlyEmployee : Employee
public class SalariedEmployee : Employee
public Computer Computer { get; private set; }
public SalariedEmployee(Computer computer)
public abstract class Computer
public class DesktopComputer : Computer
public class LaptopComputer : Computer