static void Main(string[] args) { SalariedEmployee salariedEmployee = new SalariedEmployee("James", "Stuart", 123, 10000m); HourlyEmployee hourlyEmployee = new HourlyEmployee("Ruth", "Rutherford", 124, 40, 500m); CommissionEmployee commissionEmployee = new CommissionEmployee("Ruth", "Rutherford", 124, 0.08, 50000m); BasePlusCommissionEmployee basePlusCommissionEmployee = new BasePlusCommissionEmployee("Ruth", "Rutherford", 124, 7000m, 0.06, 20000m); Invoice invoice1 = new Invoice("Fan", "Century Standing Rechargeable Fan", 18000M, 2); Invoice invoice2 = new Invoice("Projector", "EPSON Projector 3456", 68000M, 1); Console.WriteLine(salariedEmployee); Console.WriteLine($"Earnings: {salariedEmployee.Earnings():C}\n"); Console.WriteLine(hourlyEmployee); Console.WriteLine($"Earnings: {hourlyEmployee.Earnings():C}\n"); Console.WriteLine(commissionEmployee); Console.WriteLine($"Earnings: {commissionEmployee.Earnings():C}\n"); Console.WriteLine(basePlusCommissionEmployee); Console.WriteLine($"Earnings: {basePlusCommissionEmployee.Earnings():C}\n"); Console.WriteLine("=== POLYMORPHICALLY ACCESSING METHODS OF OBJECTS CREATED FROM CONCRETE DERIVED-CLASSES OF AN ABSTRACT BASE CLASS ======="); List <IPayment> paymentsDue = new List <IPayment> () { salariedEmployee, hourlyEmployee, commissionEmployee, basePlusCommissionEmployee, invoice1, invoice2 }; foreach (var payment in paymentsDue) { Console.WriteLine(payment); if (payment is BasePlusCommissionEmployee) { var baseEmployee = (BasePlusCommissionEmployee)payment; baseEmployee.BaseSalary *= 1.10M; Console.WriteLine($"Salary incremented by: 10% - {baseEmployee.BaseSalary:C}"); } Console.WriteLine($"Amount to be paid: {payment.GetPaymentAmount():C}\n"); } }
static void Main(string[] args) { SalariedEmployee salariedEmployee = new SalariedEmployee("James", "Stuart", 123, 10000m); HourlyEmployee hourlyEmployee = new HourlyEmployee("Ruth", "Rutherford", 124, 40, 500m); CommissionEmployee commissionEmployee = new CommissionEmployee("Ruth", "Rutherford", 124, 0.08, 50000m); BasePlusCommissionEmployee basePlusCommissionEmployee = new BasePlusCommissionEmployee("Ruth", "Rutherford", 124, 7000m, 0.06, 20000m); Console.WriteLine(salariedEmployee); Console.WriteLine($"Earnings: {salariedEmployee.Earnings():C}\n"); Console.WriteLine(hourlyEmployee); Console.WriteLine($"Earnings: {hourlyEmployee.Earnings():C}\n"); Console.WriteLine(commissionEmployee); Console.WriteLine($"Earnings: {commissionEmployee.Earnings():C}\n"); Console.WriteLine(basePlusCommissionEmployee); Console.WriteLine($"Earnings: {basePlusCommissionEmployee.Earnings():C}\n"); Console.WriteLine("=== POLYMORPHICALLY ACCESSING METHODS OF OBJECTS CREATED FROM CONCRETE DERIVED-CLASSES OF AN ABSTRACT BASE CLASS ======="); List <Employee> employees = new List <Employee> () { salariedEmployee, hourlyEmployee, commissionEmployee, basePlusCommissionEmployee }; foreach (var employee in employees) { Console.WriteLine(employee); if (employee is BasePlusCommissionEmployee) { var baseEmployee = (BasePlusCommissionEmployee)employee; baseEmployee.BaseSalary *= 1.10M; Console.WriteLine($"Salary incremented by: 10% - {baseEmployee.BaseSalary:C}"); } Console.WriteLine($"Earnings: {employee.Earnings():C}\n"); } }
static void Main(string[] args) { SalariedEmployee salariedEmployee = new SalariedEmployee("John", "Smith", "111-11-1111", 800.00M); HourlyEmployee hourlyEmployee = new HourlyEmployee("Karen", "Price", "222-22-2222", 16.75M, 40.0M); CommissionEmployee commissionEmployee = new CommissionEmployee("Sue", "Jones", "333-33-3333", 10000.00M, .06M); BasePlusCommissionEmployee basePlusCommissionEmployee = new BasePlusCommissionEmployee("Bob", "Lewis", "444-44-4444", 5000.00M, .04M, 300.00M); Console.WriteLine("Employees processed individually:\n"); Console.WriteLine("{0}\nearned: {1:C}\n", salariedEmployee, salariedEmployee.Earnings()); Console.WriteLine("{0}\nearned: {1:C}\n", hourlyEmployee, hourlyEmployee.Earnings()); Console.WriteLine("{0}\nearned: {1:C}\n", commissionEmployee, commissionEmployee.Earnings()); Console.WriteLine("{0}\nearned: {1:C}\n", basePlusCommissionEmployee, basePlusCommissionEmployee.Earnings()); Employee[] employees = new Employee[4]; employees[0] = salariedEmployee; employees[1] = hourlyEmployee; employees[2] = commissionEmployee; employees[3] = basePlusCommissionEmployee; foreach (var currentEmployee in employees) { Console.WriteLine(currentEmployee); if (currentEmployee is BasePlusCommissionEmployee) { //downcast Employee reference to BasePlusCommissionEmployee reference BasePlusCommissionEmployee employee = (BasePlusCommissionEmployee)currentEmployee; employee.BaseSalary *= 1.10M; Console.WriteLine("new base salary with 10% increase is: {0:C}", employee.BaseSalary); } Console.WriteLine("earned{0:C}\n", currentEmployee.Earnings()); } for (int j = 0; j < employees.Length; j++) { Console.WriteLine("Employee {0} is a {1}", j, employees[j].GetType()); } Console.ReadLine(); }
static void Main(string[] args) { // create derived class objects SalariedEmployee salariedEmployee1 = new SalariedEmployee("John", "Smith", "111-11-1111", 6, 15, 1944, 800M); HourlyEmployee hourlyEmployee1 = new HourlyEmployee("Karen", "Price", "222-22-2222", 12, 29, 1960, 16.75M, 40M); CommissionEmployee commissionEmployee1 = new CommissionEmployee("Sue", "Jones", "333-33-3333", 9, 8, 1954, 10000M, .06M); BasePlusCommissionEmployee basePlusCommissionEmployee1 = new BasePlusCommissionEmployee("Bob", "Lewis", "444-44-4444", 3, 2, 1965, 5000M, .04M, 300M); SalariedEmployee salariedEmployee2 = new SalariedEmployee("Afatarli", "Valeri", "511-11-1111", 1, 5, 1915, 600M); HourlyEmployee hourlyEmployee2 = new HourlyEmployee("Henry", "Buris", "622-22-2222", 2, 9, 1970, 14.75M, 36M); CommissionEmployee commissionEmployee2 = new CommissionEmployee("Anthony", "Doss", "733-33-3333", 4, 18, 1944, 10045M, .07M); BasePlusCommissionEmployee basePlusCommissionEmployee2 = new BasePlusCommissionEmployee("Bob", "Lewis", "844-44-4444", 5, 1, 1960, 4300M, .05M, 290M); SalariedEmployee salariedEmployee3 = new SalariedEmployee("Linda", "Ha", "911-11-1111", 7, 25, 1968, 400M); HourlyEmployee hourlyEmployee3 = new HourlyEmployee("Brian", "Louie", "122-22-2222", 8, 6, 1966, 18.85M, 60M); CommissionEmployee commissionEmployee3 = new CommissionEmployee("Leon", "Powell", "233-33-3333", 10, 22, 1959, 10100M, .07M); BasePlusCommissionEmployee basePlusCommissionEmployee3 = new BasePlusCommissionEmployee("David", "Tong", "344-44-4444", 11, 8, 1970, 5080M, .08M, 400M); // printing all types of Employee's info and their earnings Console.WriteLine("Employees processed individually:\n"); Console.WriteLine("{0}\n{1}: {2:C}\n", salariedEmployee1, "earned", salariedEmployee1.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", hourlyEmployee1, "earned", hourlyEmployee1.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", commissionEmployee1, "earned", commissionEmployee1.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", basePlusCommissionEmployee1, "earned", basePlusCommissionEmployee1.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", salariedEmployee2, "earned", salariedEmployee2.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", hourlyEmployee2, "earned", hourlyEmployee2.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", commissionEmployee2, "earned", commissionEmployee2.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", basePlusCommissionEmployee2, "earned", basePlusCommissionEmployee2.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", salariedEmployee3, "earned", salariedEmployee3.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", hourlyEmployee3, "earned", hourlyEmployee3.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", commissionEmployee3, "earned", commissionEmployee3.Earnings()); Console.WriteLine("{0}\n{1}: {2:C}\n", basePlusCommissionEmployee3, "earned", basePlusCommissionEmployee3.Earnings()); // create four-element Employee array Employee[] employees = new Employee[12]; // initialize array with Employees employees[0] = salariedEmployee1; employees[1] = hourlyEmployee1; employees[2] = commissionEmployee1; employees[3] = basePlusCommissionEmployee1; employees[4] = salariedEmployee2; employees[5] = hourlyEmployee2; employees[6] = commissionEmployee2; employees[7] = basePlusCommissionEmployee2; employees[8] = salariedEmployee3; employees[9] = hourlyEmployee3; employees[10] = commissionEmployee3; employees[11] = basePlusCommissionEmployee3; int currentMonth; // get and validate current month do { Console.Write("Enter the current month (1 - 12): "); currentMonth = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(); } while ((currentMonth < 1) || (currentMonth > 12)); Console.WriteLine("Employees processed polymorphically:\n"); // generically process each element in array employees foreach (var currentEmployee in employees) { Console.WriteLine(currentEmployee); // invokes ToString // determine whether element is a BasePlusCommissionEmployee if (currentEmployee is BasePlusCommissionEmployee) { // downcast Employee reference to // BasePlusCommissionEmployee reference BasePlusCommissionEmployee employee = (BasePlusCommissionEmployee)currentEmployee; employee.BaseSalary *= 1.1M; Console.WriteLine( "new base salary with 10% increase is: {0:C}", employee.BaseSalary); } // end if // if month of employee's birthday, add $100 to salary if (currentMonth == currentEmployee.BirthDate.Month) { Console.WriteLine( "earned {0:C} {1}\n", currentEmployee.Earnings(), "plus $100.00 birthday bonus"); } else { Console.WriteLine( "earned {0:C}\n", currentEmployee.Earnings()); } } // end for // get type name of each object in employees array for (int j = 0; j < employees.Length; j++) { Console.WriteLine("Employee {0} is a {1}", j, employees[j].GetType()); } // Pauses the console and showcase the results // prompt user any key to exit the console Console.WriteLine("\nPress any key to exit."); Console.ReadKey(); }