Cele lekcji
Po zakończeniu tej lekcji…
- Zrozumiesz, jak w programie tworzone są wystąpienia obiektów.
- Nauczysz się przypisywać wartości do właściwości obiektu.
- Dowiesz się, jak korzystać z klas w różnych projektach (tworzyć odwołania).
- Poznasz sposoby wyświetlania właściwości obiektu w interfejsie użytkownika.
Tworzenie pierwszego wystąpienia obiektu
Mamy już klasę Player, możemy więc utworzyć jej wystąpienie – obiekt Player. W ten sposób na podstawie dostępnej ramy (klasy) opracujemy obiekt Player, którego będziemy używać w grze.
Etap 1: Uruchom aplikację Visual Studio i otwórz swoje rozwiązanie.
Zanim przejdziemy dalej, usuniemy przycisk Test, który utworzyliśmy wcześniej.
W projekcie interfejsu użytkownika SuperAdventure kliknij dwukrotnie pozycję SuperAdventure.cs, aby wyświetlić formularz.
Kliknij przycisk Test i wybierz go. Wokół niego pojawi się obramowanie. Usuń przycisk, naciskając klawisz Delete.
Prawym przyciskiem myszy kliknij pozycję SuperAdventure.cs w oknie Solution Explorer i wybierz polecenie View Code, aby wyświetlić kod formularza. Usuń wiersze 19-23.
Teraz można utworzyć zmienną Player.
Etap 2: Jednego obiektu Player będziemy używać w wielu miejscach na ekranie SuperAdventure, więc musimy gdzieś przechowywać ten obiekt. Tu na scenę wchodzi zmienna, która pozwala przechowywać obiekt i pobierać go, gdy jest potrzebny.
W naszym przypadku musimy utworzyć zmienną na poziomie klasy. Taka zmienna będzie dostępna dla wszystkich elementów w klasie.
Zmienną na poziomie klasy można umieścić wewnątrz danej klasy (w naszym przypadku będzie to formularz SuperAdventure, który jest klasą), ale poza funkcjami czy metodami.
Przejdź do końca wiersza 14 i naciśnij klawisz Enter, aby utworzyć nowy wiersz.
W wierszu 15 wpisz:
private Player _player;
Teraz kod klasy wygląda następująco:
public partial class SuperAdventure : Form { private Player _player; public SuperAdventure() { InitializeComponent(); } }
Podobnie jak w przypadku właściwości utworzonych dla klasy Player zmienna również składa się z trzech elementów:
Najpierw mamy zakres. Tutaj zakresem jest private, ponieważ żaden element poza tym ekranem nie będzie korzystać z tej zmiennej.
Typ danych to Player, ponieważ tu będziemy przechowywać obiekt Player.
Nazwą jest _player, ale możesz wybrać dowolną nazwę i nie musi się ona zaczynać podkreślnikiem. Użyłem takiej nazwy, ponieważ w ten sposób zazwyczaj nazywam zmienne private.
Słowo Player jest podkreślone czerwoną, falującą linią. Oznacza to, że wystąpił jakiś problem; formularz SuperAdventure nie wie, gdzie znajduje się klasa Player.
Etap 3: Przejdź do wiersza 10, naciśnij klawisz Enter i wpisz:
using Engine;
Początek klasy wygląda następująco:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Engine;
Czerwone podkreślenie zniknęło, ponieważ teraz formularz SuperAdventure wie, gdzie szukać klasy Player w projekcie Engine. Taką operację należy wykonać dla każdej klasy, kiedy wykorzystywane są klasy z innych projektów.
UWAGA:Jeśli czerwone podkreślenie nie zniknie, sprawdź poniższe komentarze, gdzie znajdziesz rozwiązania wszystkich najczęstszych przyczyn tego problemu.
Mamy już zasobnik do przechowywania obiektu Player; teraz musimy jeszcze utworzyć sam obiekt Player.
Etap 4: W wierszu 19. zaczyna się kod. Jest to konstructor klasy (formularz, jak każdy element w środowisku .Net, jest klasą). Kod z konstruktora jest wywoływany podczas tworzenia nowego obiektu lub klasy (u nas będzie to formularz).
Teraz utworzymy wystąpienie obiektu Player i umieścimy je w zmiennej _player.
Przejdź do końca wiersza 21 i naciśnij dwukrotnie klawisz Enter. (Nie potrzebujemy dwóch nowych wierszy, ale elegancki kod zawsze zawiera trochę pustych miejsc).
W wierszu 23 wpisz:
_player = new Player();
Ten wiersz spowoduje utworzenie nowego obiektu Player (informacje po prawej stronie znaku równości) i przypisanie go do zmiennej _player utworzonej w wierszu 17.
Obiekt Player jest już gotowy, czas więc go rozbudować, ustawić właściwości i odczytać je.
UWAGA: Pojedynczy znak równości w języku C# oznacza przypisanie, czyli przyłączenie wyniku dowolnej operacji po prawej stronie znaku równości do właściwości lub zmiennej widocznej po lewej stronie. To, w jaki sposób się porównuje dwie wartości, omówimy później.
Etap 5: Dodaj pusty wiersz po wierszu 24, a następnie wpisz poniższy kod:
_player.CurrentHitPoints = 10; _player.MaximumHitPoints = 10; _player.Gold = 20; _player.ExperiencePoints = 0; _player.Level = 1;
Teraz konstruktor wygląda następująco:
public SuperAdventure() { InitializeComponent(); _player = new Player(); _player.CurrentHitPoints = 10; _player.MaximumHitPoints = 10; _player.Gold = 20; _player.ExperiencePoints = 0; _player.Level = 1; }
W tych wierszach przypisujemy wartości do właściwości obiektu _player.
Etap 6: Dodaj pusty wiersz po wierszu 30, a następnie wpisz poniższy kod:
lblHitPoints.Text = _player.CurrentHitPoints.ToString(); lblGold.Text = _player.Gold.ToString(); lblExperience.Text = _player.ExperiencePoints.ToString(); lblLevel.Text = _player.Level.ToString(); Teraz kod powinien wyglądać następująco: public SuperAdventure() { InitializeComponent(); _player = new Player(); _player.CurrentHitPoints = 10; _player.MaximumHitPoints = 10; _player.Gold = 20; _player.ExperiencePoints = 0; _player.Level = 1; lblHitPoints.Text = _player.CurrentHitPoints.ToString(); lblGold.Text = _player.Gold.ToString(); lblExperience.Text = _player.ExperiencePoints.ToString(); lblLevel.Text = _player.Level.ToString(); }
Wprowadzony kod pozwala nam pobierać wartości właściwości z obiektu _player i przypisywać je do tekstu w etykietach wyświetlanych na ekranie.
Wcześniej wspomniałem, że wartości liczby całkowitej nie można przypisać do ciągu ani odwrotnie.
Właściwość Text jest ciągiem, a właściwości CurrentHitPoints, Gold, ExperiencePoints i Level to liczby całkowite, więc na końcu każdej z nich musimy dodać element ToString(). Jest to popularna metoda przekształcania liczb w ciągi.
Etap 7: Zapisz kod i uruchom program. Wartości przypisane do właściwości _player są już widoczne na ekranie. Jeśli chcesz, możesz zatrzymać program, zmienić wartości w wierszach 25-29, uruchomić program ponownie i sprawdzić wprowadzone zmiany.
Podsumowanie
Potrafisz już utworzyć zmienną, utworzyć wystąpienie obiektu z klasy w innym projekcie, przypisać obiekt do zmiennej, zmienić wartości właściwości obiektu i wyświetlać zmiany w interfejsie użytkownika.
Te operacje stanowią szeroki zakres najważniejszych funkcji związanych z tworzeniem programów w dowolnym języku obiektowym.
Łącza do tej lekcji