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.

C#Technikum
CEL LEKCJI

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.

TEORIA

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.

Fragment C#
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.

Fragment C#
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.

Fragment C#
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

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.

Program.cs — cały plik
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);
    }
}
Oczekiwany wynik
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ę.

Pobierz Program.cs

ELEMENTY WBUDOWANE

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

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

Zadania

ZAD 1Stan zamówienia★☆☆

Zdefiniuj enum Etap z Nowe, WRealizacji, Gotowe.

Sprawdź: Wypisz Etap.Gotowe i sprawdź wynik.

ZAD 2Kopia punktu★★☆

Zmień także b.Y na 8 i wypisz współrzędne obu punktów.

Sprawdź: a: 2,3; b: 9,8.

ZAD 3Wybór typu★★★

Uzasadnij wybór klasy dla ucznia i struktury dla prostego punktu.

Sprawdź: Wyjaśnij tożsamość obiektu i kopiowanie wartości.

PODSUMOWANIE

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.