Powtórzenie – hierarchia pracowników
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 24 z 70.
Wyzwanie
ŁatwyStwórzmy system hierarchii pracowników, który łączy wszystkie zagadnienia związane z dziedziczeniem z tego rozdziału. Utworzysz strukturę firmy, w której różne typy pracowników mają wspólne atrybuty, ale inaczej obliczają swoje premie.
Rozmieścisz kod w czterech plikach:
Employee.cs: Zdefiniuj klasę bazowąEmployeew przestrzeni nazwCompany. Każdy pracownik maName(string) iSalary(decimal). Utwórz konstruktor, który przyjmuje obie te wartości. Dodaj metodęvirtualo nazwieCalculateBonus(), która domyślnie zwraca 10% wynagrodzenia. PrzesłońToString(), aby zwracała"{Name} - ${Salary}".Manager.cs: Zdefiniuj klasęManagerw przestrzeni nazwCompany, która dziedziczy poEmployee. Menedżerowie mają dodatkową właściwośćTeamSize(int). Konstruktor powinien przyjmować imię, wynagrodzenie i liczebność zespołu oraz używaćbasedo inicjalizacji klasy nadrzędnej. PrzesłońCalculateBonus(), aby zwracała 15% wynagrodzenia plus 50 USD za każdego członka zespołu. PrzesłońToString(), aby zwracała"{Name} - ${Salary} (Manager, Team: {TeamSize})".Developer.cs: Zdefiniuj klasęDeveloperw przestrzeni nazwCompany, która dziedziczy poEmployee. Deweloperzy mają właściwośćProgrammingLanguage(string). Konstruktor przyjmuje imię, wynagrodzenie i język programowania. PrzesłońCalculateBonus(), aby zwracała 12% wynagrodzenia. PrzesłońToString(), aby zwracała"{Name} - ${Salary} (Developer, {ProgrammingLanguage})".Program.cs: W pliku głównym utwórz po jednym obiekcie każdego typu pracownika, używając wartości wejściowych. Umieść wszystkie trzy obiekty w tablicy referencji typuEmployee, aby zademonstrować polimorfizm. Przejdź pętlą przez tablicę i wypisz wynikToString()każdego pracownika, a następnie jego premię.
Otrzymasz osiem danych wejściowych:
- Imię pracownika bazowego
- Wynagrodzenie pracownika bazowego
- Imię menedżera
- Wynagrodzenie menedżera
- Liczebność zespołu menedżera
- Imię dewelopera
- Wynagrodzenie dewelopera
- Język programowania dewelopera
Wypisz informacje o każdym pracowniku i jego premii w tym formacie:
{ToString result}
Bonus: ${CalculateBonus result}Na przykład, jeśli dane wejściowe to John, 50000, Sarah, 80000, 5, Mike, 70000 i C#, wynikiem powinno być:
John - $50000
Bonus: $5000
Sarah - $80000 (Manager, Team: 5)
Bonus: $12250
Mike - $70000 (Developer, C#)
Bonus: $8400Zauważ, że każdy typ pracownika oblicza premie inaczej, a mimo to możesz obsługiwać je wszystkie za pomocą jednej tablicy Employee. Na tym polega siła połączenia dziedziczenia z polimorfizmem!
Spróbuj swoich sił
using System;
using Company;
class Program
{
public static void Main(string[] args)
{
// Wczytaj dane podstawowego pracownika
string empName = Console.ReadLine();
decimal empSalary = Convert.ToDecimal(Console.ReadLine());
// Wczytaj dane menedżera
string mgrName = Console.ReadLine();
decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
int teamSize = Convert.ToInt32(Console.ReadLine());
// Wczytaj dane programisty
string devName = Console.ReadLine();
decimal devSalary = Convert.ToDecimal(Console.ReadLine());
string progLang = Console.ReadLine();
// TODO: Utwórz po jednym obiekcie Employee, Manager i Developer
// TODO: Umieść wszystkie trzy obiekty w tablicy Employee, aby zademonstrować polimorfizm
// TODO: Przejdź przez tablicę i wypisz wynik ToString() oraz premię każdego pracownika
// Format:
// {wynik ToString}
// Premia: ${wynik CalculateBonus}
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metodPoćwicz samodzielnie: Kompilator C# online