Struktury i typy wyliczeniowe w C
1. Wprowadzenie
- Struktury (struct) i typy wyliczeniowe (enum) to specjalne typy danych w C#.
- Struktury pozwalają grupować dane różnych typów w jedną logiczną całość (podobnie do klas, ale są typami wartościowymi).
- Typy wyliczeniowe służą do definiowania zestawu nazwanych stałych całkowitych.
- Oba typy zwiększają czytelność kodu i bezpieczeństwo typów.
2. Struktury (struct)
2.1. Definicja
- Struktura to typ wartościowy (
value type), przechowywany na stosie (stack). - W przeciwieństwie do klas (typy referencyjne), struktury nie są alokowane na heapie.
Składnia:
Przykład:
2.2. Tworzenie instancji struktury
2.3. Różnice między strukturą a klasą
| Cecha | Struktura (struct) |
Klasa (class) |
|---|---|---|
| Typ | Wartościowy (value type) | Referencyjny (ref type) |
| Przechowywanie | Stos (stack) | Sterta (heap) |
| Dziedziczenie | Nie można dziedziczyć | Można dziedziczyć |
| Konstruktor domyślny | Zawsze istnieje | Można go zdefiniować |
| Wartość domyślna | Wypełniona zerami/nullami | null |
| Najlepsze zastosowanie | Małe, proste struktury | Większe, złożone obiekty |
| Przekazywanie do metod | Kopiowanie wartości | Przekazywanie referencji |
2.4. Kiedy używać struktur?
- Gdy typ przechowuje małe ilości danych.
- Gdy nie jest potrzebne dziedziczenie.
- Gdy chcesz unikać alokacji na heapie dla poprawy wydajności.
- Przykłady:
Point,Rectangle,Color,DateTime.
3. Typy wyliczeniowe (enum)
3.1. Definicja
- Enum to typ specjalny zawierający zestaw nazwanych stałych całkowitych.
- Pozwala na pisanie bardziej czytelnego kodu zamiast „magicznych liczb".
- Domyślnie wartości enuma to liczby typu
int, zaczynając od 0.
Składnia:
Przykład:
3.2. Użycie enum
3.3. Własne wartości enum
Można ręcznie przypisać wartości:
3.4. Enum z innym typem bazowym
Domyślnie enum używa int, ale można zmienić na inny typ całkowity:
3.5. Konwersje enum
- Enum → int:
- int → enum:
- String → enum (parsing):
- Enum → string:
3.6. Sprawdzanie wartości enum
4. Porównanie struct i enum
| Cecha | Struktura (struct) |
Enum |
|---|---|---|
| Cel | Grupowanie różnych danych | Definiowanie stałych nazwanych |
| Typ | Złożony typ wartościowy | Typ całkowity |
| Zawartość | Pola, metody, właściwości | Tylko stałe nazwane |
| Zastosowanie | Małe obiekty, koordynaty, kolory | Statusy, opcje, wyliczenia |
5. Przykładowy program
6. Najlepsze praktyki
- Używaj struktury dla małych, prostych obiektów bez potrzeby dziedziczenia.
- Używaj enum zamiast „magicznych liczb" dla lepszej czytelności kodu.
- Nie nadużywaj struktur dla dużych obiektów – to może obniżyć wydajność.
- Zawsze nazywaj wartości enum zrozumiałymi nazwami opisującymi ich znaczenie.