Press "Enter" to skip to content

08.1: Ustawianie właściwości za pomocą konstruktora klas

Cele lekcji

Po zakończeniu tej lekcji…

  • Poznasz konstruktora klas.
  • Dowiesz się, jak używać konstruktora klas w celu ustawiania właściwości obiektu podczas tworzenia jego wystąpień.
  • Zrozumiesz, w jaki sposób klasa podrzędna (pochodna) może wywoływać konstruktora swojej klasy podstawowej.

 

Czas wyczyścić kod

W klasie SuperAdventure tworzone jest wystąpienie obiektu Player, a kolejnych 5 wierszy ustawia właściwości obiektu Player. Działa to nieźle, ale kod jest trochę niechlujny. Możemy go wyczyścić i skomasować te operacje w jednym wierszu.

W tym celu posłużymy się nową klasą konstruktora.

Każda klasa rozpoczyna się od konstruktora domyślnego. To właśnie konstruktor jest uruchamiany po wywołaniu new Player(). Wykonuje on kompilację i zwraca obiekt Player.

Możemy jednak utworzyć własnego konstruktora, który poza działaniem domyślnym wykona inne operacje. Podczas tej lekcji utworzymy konstruktora przyjmującego wartości, które my chcemy zachować we właściwościach.

 

 

Etap 1: Uruchom aplikację Visual Studio i otwórz swoje rozwiązanie.

 

Etap 2: Aby sprawdzić, jak to działa, w kodzie interfejsu użytkownika tymczasowo utwórz obiekt location (lokalizacja). W projekcie SuperAdventure prawym przyciskiem myszy kliknij pozycję SuperAdventure.cs i wybierz polecenie View Code.

 

Etap 3: Przejdź do końca wiersza 21 i naciśnij dwukrotnie klawisz Enter, a następnie dodaj poniższy kod:

Location location = new Location();
location.ID = 1;
location.Name = "Home";
location.Description = "This is your house.";

 

Tworzymy właśnie nowy obiekt Location. Zapiszemy go w zmiennej location (nazwa zmiennej jest w całości zapisana małymi literami, aby odróżnić ją od klasy). Za chwilę przypiszemy wartości do właściwości tego obiektu.

 

Etap 4: W projekcie Engine dwukrotnie kliknij klasę Location, aby wyświetlić jej kod. Przejdź do końca wiersza 13. i naciśnij dwukrotnie klawisz Enter. Następnie dodaj poniższy kod:

public Location(int id, string name, string description)
{
    ID = id;
    Name = name;
    Description = description;
}

 

To właśnie nasz nowy kod konstruktora.

Rozpoczyna się on modyfikatorem public, ponieważ chcemy móc tworzyć nowy obiekt Location z dowolnego położenia w rozwiązaniu. Następnie występuje nazwa klasy i trzy parametry w nawiasach.

Po uruchomieniu funkcji lub metody (np. konstruktor) może ona przyjmować wartości nazywane parametrami. W języku C# należy zadeklarować typ danych parametru i jego nazwę. Nasz konstruktor zawiera trzy parametry: id (liczba całkowita), name (ciąg) i description (inny ciąg).

Nazwy parametrów odpowiadają nazwom właściwości, ale są zapisane w całości małymi literami. Różne wielkości liter pozwalają rozróżniać, czy mamy do czynienia z właściwością czy wartością parametru. Nazwa parametru nie musi być zgodna z nazwą właściwości, ale ja stosuje zgodne nazwy, aby jednoznacznie wskazać, do czego odnoszą się dane parametry.

Więc podczas wywoływania konstruktora Location należy przekazać te trzy wartości.

W wierszach 17-19 przypiszemy wartości parametrów do właściwości w klasie. Wszystkie parametry (małe litery) znajdują się po prawej stronie znaku równości, a właściwości (różna wielkość liter) — po lewej. Wartość po prawej stronie znaku równości jest przypisywana do właściwości lub zmiennej po lewej stronie.

 

Etap 5: Po przejściu do kodu SuperAdventure fragment new Location() jest podkreślony na czerwono. Dlaczego? Ponieważ w klasie Location nie używamy już konstruktora domyślnego i używamy własnego, niestandardowego konstruktora wymagającego trzech parametrów.

Po usunięciu sekcji new Location() i ponownym jej wprowadzeniu podczas wpisywania otwartego nawiasu pojawia się podpowiedź z „sygnaturą metody”, czyli parametrami, które należy przekazać do metody/konstruktora.

Wiersz 23 zmodyfikuj, aby wyglądał tak:

Location location = new Location(1, "Home", "This is your house.");

 

Teraz po utworzeniu nowego obiektu Location możesz przekazać parametry, które chcesz przypisać do właściwości. Dzięki temu kod staje się bardziej przejrzysty, a ponadto pozwala to upewnić się, że określone zostały wszystkie właściwości, gdyż podczas ręcznego ustawiania wszystkich właściwości łatwo o jakiejś z nich zapomnieć. Konstruktor akceptujący parametry nie pozwoli pominąć żadnej z nich i zawsze będziesz wiedzieć, ile właściwości należy przekazać. Jeśli jednak zapomnisz o którejś z nich, to zostanie wyświetlone czerwone podkreślenie.

 

Etap 6: W projekcie Engine kliknij dwukrotnie klasę Quest i zacznij ją modyfikować. Po właściwościach dodaj następujące wiersze:

public Quest(int id, string name, string description, int rewardExperiencePoints, int rewardGold)
{
    ID = id;
    Name = name;
    Description = description;
    RewardExperiencePoints = rewardExperiencePoints;
    RewardGold = rewardGold;
}

 

 

Klasa Quest ma już niestandardowego konstruktora przyjmującego wartości pozwalające na określenie jego właściwości.

 

Podsumowanie

Niestandardowe konstruktory są powszechnie używane w projektach w języku C# i pozwalają w porosty sposób upewnić się, że w danej klasie określono wszystkie wymagane właściwości. Za pomocą konstruktora można również wykonać operacje specjalne, ale o tym opowiem później.

Łącza do tej lekcji

Kod źródłowy w serwisie GitHub

Kod źródłowy w serwisie Dropbox

    Leave a Reply

    Your email address will not be published. Required fields are marked *