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.