using System.Collections.Generic;
public string FirstName {get;set;}
public string LastName {get;set;}
public double Salary {get;set;}
Console.WriteLine("First Name: {0}, Last Name: {1}, Salary: {2}", FirstName, LastName, Salary);
public virtual double GetSalary(){
public class SalesPerson : Employee{
public int SuccessSaleRevenue {get;set;}
public SalesPerson(string first, string last, int success){
SuccessSaleRevenue = success;
public void ExtendSuccessSaleRevenue(int successValue){
SuccessSaleRevenue += successValue;
public override double GetSalary(){
if(SuccessSaleRevenue <= 2000){
} else if(SuccessSaleRevenue <= 5000){
} else if(SuccessSaleRevenue > 5000){
public class Manager : Employee {
public string Department {get;set;}
private double Bonus {get;set;}
public Manager(string first, string last, double salary, string department){
public void AddBonus(double bonus){
public override double GetSalary(){
public class Contractor : Employee {
public int WorkHours {get;set;}
public double PayPerHour {get;set;}
public Manager Responsible {get;set;}
public override double GetSalary(){
return WorkHours * PayPerHour;
public void CurrentPosition(Manager manager){
Console.WriteLine("My current position is in the {0} Department!", manager.Department );
public Contractor(string first, string last, int workHours, double payPerHour, Manager manager){
public class CEO : Employee{
public List<Employee> Employees {get;set;}
public int Shares {get;set;}
public double SharesPrice {get;set;}
public override double GetSalary(){
return Salary + ( Shares * SharesPrice );
public void PrintEmployees(){
foreach(Employee employee in Employees){
public CEO(string first, string last, double salary, List<Employee> employees, int shares, double sharePrice){
SharesPrice = sharePrice;
public static void Main()
Employee emp = new Employee(){FirstName = "Bob", LastName = "Bobsky", Salary = 600};
SalesPerson sale = new SalesPerson("Bill","Billsky", 1500);
Manager mng = new Manager("Ron", "Ronsky", 1500, "Marketing");
sale.ExtendSuccessSaleRevenue(2000);
Console.WriteLine("Employee Salary: " + emp.GetSalary());
Console.WriteLine("Sales Person Salary: " + sale.GetSalary());
Console.WriteLine("Manager Salary: " + mng.GetSalary());
List<Employee> someEmployees = new List<Employee>();
Manager manager1 = new Manager("Zdrave", "Zdravevski", 1500, "Sales");
Manager manager2 = new Manager("Bosko", "Boskovski", 1200, "Marketing");
someEmployees.Add(new Contractor("Bobi", "Bobevski", 30, 12.5, manager1 ));
someEmployees.Add(new Contractor("Riste", "Ristevski", 30, 12.5, manager2));
someEmployees.Add(new SalesPerson("Igor", "Igorski", 2000));
someEmployees.Add(manager1);
someEmployees.Add(manager2);
CEO theBoss = new CEO("Filip", "Vancevski", 2000, someEmployees, 230, 10.5);
Console.WriteLine("The Boss salary : " + theBoss.GetSalary());
theBoss.PrintEmployees();