Enum i struct — nazwane stany oraz proste wartości
Zamiast pamiętać, że 2 oznacza oddany sprzęt, użyjemy nazwy. Poznamy też mały typ reprezentujący punkt planszy.
Czego się dziś nauczysz
- Zastąpisz magiczne liczby przez enum.
- Odróżnisz kopiowanie struktury od kopiowania referencji klasy.
- Rozpoznasz zastosowanie prostego struct.
Przygotowanie: lekcje 01–48. Przewidywany czas: 45–90 minut z zadaniami. Przykłady wymagają .NET 8 lub nowszego, z włączonymi ImplicitUsings i Nullable.
Wyjaśnienie krok po kroku
Nazwany zestaw stałych
enum Stan { Dostepny, Wypozyczony, Oddany } nadaje nazwy wartościom liczbowym, domyślnie 0, 1, 2. Nazwy ułatwiają warunki i switch. Rzutowanie liczby na enum nie sprawdza, czy odpowiada ona nazwanej wartości.
Tak wygląda to w kodzie — Definicja typu — poza Main. To fragment ilustracyjny, nie cały Program.cs.
enum Stan
{
Nowy,
WTrakcie,
Gotowy
}
// W Main: Stan stan = Stan.Gotowy;
Nazwy opisują stany czytelniej niż same liczby. Domyślne wartości tych trzech stałych to kolejno 0, 1 i 2.
Struktura jest wartością
struct Point reprezentuje wartość. Przypisanie tworzy kopię wartości pól. W przykładzie są tylko int, więc zmiana kopii nie zmienia oryginału. Jeśli struktura zawiera referencję do obiektu, skopiowana zostanie referencja, nie cały obiekt.
Tak wygląda to w kodzie — Definicja typu — poza Main. To fragment ilustracyjny, nie cały Program.cs.
struct Punkt
{
public int X;
public int Y;
}
Przypisanie takiego Punktu kopiuje dwie liczby. Publiczne pola służą prostemu doświadczeniu; w osobnej lekcji struktur pokazujemy też wersję readonly z właściwościami.
Wartość a pamięć
Nie ucz się reguły „struct na stosie, class na stercie” jako definicji. Miejsce przechowywania zależy od kontekstu i środowiska. Dla początkującego najważniejsze są zasady kopiowania i odpowiedzialność typu. Małe struktury zwykle warto projektować jako niezmienne.
Tak wygląda to w kodzie — Fragment wnętrza Main; Punkt ma publiczne pole X. To fragment ilustracyjny, nie cały Program.cs.
Punkt a = new Punkt { X = 2 };
Punkt b = a;
b.X = 9;
Console.WriteLine(a.X); // 2
Zmiana kopii b nie zmienia a. Wniosek dotyczy kopiowania wartości; nie wymaga ustalania fizycznego miejsca danych w pamięci.
Przykład do zbadania
Wklej cały przykład do nowego projektu konsolowego jako Program.cs. Zastąp poprzednią zawartość pliku. Nie łącz kilku całych programów w jednym pliku.
using System;
enum Stan { Dostepny, Wypozyczony, Oddany }
struct Punkt
{
public int X;
public int Y;
}
class Program
{
static void Main()
{
Stan stan = Stan.Wypozyczony;
Console.WriteLine(stan);
Punkt a = new Punkt { X = 2, Y = 3 };
Punkt b = a;
b.X = 9;
Console.WriteLine(a.X);
Console.WriteLine(b.X);
}
}
Wypozyczony
2
9
Co dzieje się po kolei
- Enum pokazuje nazwę przy zwykłym wypisaniu znanej wartości.
- Punkt b = a kopiuje oba pola int.
- Publiczne pola służą tu eksperymentowi kopiowania; dla modelu z regułami stosuj właściwości i enkapsulację.
Użyte w tej lekcji elementy
Metody .NET są gotowymi narzędziami biblioteki. Instrukcje języka i nasze metody oznaczamy osobno. Właściwości, np. Length, odczytujemy bez nawiasów.
| Element | Wynik | Działanie i ograniczenia |
|---|---|---|
Console.WriteLine(wartosc) |
void | Wyświetla enum lub liczbę i kończy wiersz. |
new Punkt { X = 2, Y = 3 } |
Punkt | Składnia inicjalizatora obiektu ustawia pola utworzonej wartości. To element języka, nie metoda biblioteki. |
Częste błędy
- (Stan)99 jest możliwe, choć nie ma elementu o nazwie odpowiadającej 99.
- Struct z polem referencyjnym nie wykonuje automatycznie głębokiej kopii obiektu.
- Enum nie jest tekstem; wartość Stan.Dostepny nie jest napisem "Dostepny".
Zadania
Zdefiniuj enum Etap z Nowe, WRealizacji, Gotowe.
Sprawdź: Wypisz Etap.Gotowe i sprawdź wynik.
Zmień także b.Y na 8 i wypisz współrzędne obu punktów.
Sprawdź: a: 2,3; b: 9,8.
Uzasadnij wybór klasy dla ucznia i struktury dla prostego punktu.
Sprawdź: Wyjaśnij tożsamość obiektu i kopiowanie wartości.
Sprawdź, czy rozumiesz
Wyjaśnij własnymi słowami, jak działa główny przykład i dlaczego daje taki wynik. Następnie zmień jedną daną i przewidź wynik przed uruchomieniem. Wróć do celów lekcji i sprawdź, które potrafisz już wykonać samodzielnie.
Dokumentacja: Microsoft Learn — temat tej lekcji.