05.1: Tworzenie obiektów na podstawie klas

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

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 *