Press "Enter" to skip to content

09.1: Klasy jako typy danych

Cele lekcji

Po zakończeniu tej lekcji…

  • Dowiesz się, jak utworzyć właściwość w klasie używającej jednej z innych klas w charakterze typu danych.

 

Dodawanie właściwości za pomocą niestandardowych typów danych

Aktualnie wszystkie właściwości w naszych klasach to ciągi lub liczby całkowite, jednak niekiedy we właściwości trzeba przechować bardziej złożone dane.

Przykładowo w klasie Location chcemy przechować przedmiot wymagany do przejścia do lokacji (np. klucz). Jeśli w tej lokacji dostępne jest zadanie, musimy przechować tę wartość. W tej samej lokacji może również znajdować się potwór,

więc, aby przechować wszystkie te wartości, musimy do klasy Location dodać nowe właściwości.

 

 

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

 

Etap 2: W projekcie Engine zmodyfikuj klasę Location i dodaj nowe właściwości:

public Item ItemRequiredToEnter { get; set; }
public Quest QuestAvailableHere { get; set; }
public Monster MonsterLivingHere { get; set; }
public Location LocationToNorth { get; set; }
public Location LocationToEast { get; set; }
public Location LocationToSouth { get; set; }
public Location LocationToWest { get; set; }

 

Teraz już dysponujemy właściwościami pozwalającymi przechowywać te wartości dla każdej lokacji. Ponieważ we właściwości ItemRequiredToEnter musimy przechować obiekt Item, jego typem danych jest Item. Działa to analogicznie jak w przypadku korzystania z typu danych ciąg służącego do przechowywania tekstu we właściwości.

 

Etap 3: Dodaj do konstruktora parametry pozwalające na przyjmowanie niektórych z tych wartości i zapisz je we właściwościach. Zmodyfikuj kod konstruktora, aby wyglądał tak:

public Location(int id, string name, string description,
            Item itemRequiredToEnter = null, Quest questAvailableHere = null, Monster monsterLivingHere = null)
{
    ID = id;
    Name = name;
    Description = description;
    ItemRequiredToEnter = itemRequiredToEnter;
    QuestAvailableHere = questAvailableHere;
    MonsterLivingHere = monsterLivingHere;
}

 

Po każdym nowym parametrze występuje kod = null. Oznacza to, że przejście do niektórych lokacji nie wymaga żadnych przedmiotów i nie ma w nich zadań ani potworów. Pozwala nam to na wywołanie konstruktora Location bez przekazywania tych trzech wartości. Konstruktor będzie po prostu używał wartości domyślnych, czyli w tym przypadku null. Więc obydwa poniższe wiersze zadziałają tak samo:

Location test1 = new Location(1, "Your House", "This is your house");
Location test2 = new Location(1, "Your House", "This is your house", null, null, null);

 

Etap 4: W projekcie Engine zmodyfikuj klasę Quest i dodaj nową właściwość:

public Item RewardItem { get; set; }

 

Właściwość RewardItem będzie przechowywać przedmioty uzyskiwane przez gracza po ukończeniu zadania.

UWAGA: W filmie parametry w konstruktorze klasy Location znajdują się w dwóch wierszach. Jest to poprawne, ponieważ ostatnim znakiem w pierwszym wierszu jest przecinek, więc program wie, że kolejny wiersz jest kontynuacją poprzedniego. Użyłem takiego formatu, ponieważ wiersz jest długi i niewygodnie się go czytało.

W języku C# koniec wiersza oznacza się średnikiem „;”, zamkniętym nawiasem „)” lub zamkniętą klamrą „}”.

 

Podsumowanie

Umiesz już tworzyć właściwości zawierające złożone wartości. Pozwoli Ci to na przykład na podanie nazwy potwora w lokacji bez potrzeby wykonywania dodatkowego wyszukiwania poza danym obiektem.

 

Łą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 *