0Pricing
C# Academy · Lekcja

Enumy i [Flags]

Definiuj enumy z jawnymi wartościami i typami bazowymi, bezpiecznie konwertuj i analizuj ich wartości oraz modeluj łączone opcje za pomocą [Flags].

Enumy i [Flags] to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 3 lekcji w sumie.

Przegląd typów wyliczeniowych

Cel: Używanie typów wyliczeniowych dla nazwanych stałych oraz [Flags] dla łączonych opcji.

  • Nazwy są mapowane na liczby
  • Typ bazowy (domyślnie int)
  • Rzutowanie, analizowanie i weryfikowanie
  • Łączenie bitowe za pomocą [Flags]

Podstawowy typ wyliczeniowy

Typy wyliczeniowe to nazwane stałe. Można wyświetlić ich nazwę albo rzutować je na odpowiadającą im liczbę.

using System;

public enum OrderStatus
{
  Pending = 0,
  Processing = 1,
  Shipped = 2,
  Delivered = 3,
  Cancelled = 4
}

public class Program
{
  public static void Main(string[] args)
  {
    OrderStatus s = OrderStatus.Processing;
    Console.WriteLine("Status = " + s);
    Console.WriteLine("Numeric = " + (int)s);
  }
}

Typ bazowy i rzutowanie

Można wybrać typ bazowy (short, byte itd.). Rzutowanie liczb nie sprawdza poprawności wartości.

using System;

// Choose underlying type if needed (default is int)
public enum HttpCode : short
{
  Ok = 200,
  NotFound = 404
}

public class Program
{
  public static void Main(string[] args)
  {
    short code = (short)HttpCode.Ok; // cast to number
    HttpCode fromNum = (HttpCode)404; // cast from number (no validation)
    Console.WriteLine("code=" + code);
    Console.WriteLine("fromNum=" + fromNum);
  }
}

Parsowanie i walidacja

Użyj Enum.TryParse do odczytu tekstu i Enum.IsDefined do walidacji wartości liczbowych.

using System;

public enum Color
{
  Red = 1, Green = 2, Blue = 3
}

public class Program
{
  public static void Main(string[] args)
  {
    Color c;
    bool ok = Enum.TryParse<Color>("green", true, out c); // ignore case
    Console.WriteLine("Parsed? " + ok + " value=" + c);

    // Validate a numeric value before casting
    int raw = 4;
    bool valid = Enum.IsDefined(typeof(Color), raw);
    Console.WriteLine("Is 4 a defined Color? " + valid);
  }
}

[Flags] w praktyce

Dodaj [Flags] i przypisz wartości będące potęgami dwójki. Łącz je za pomocą |, sprawdzaj za pomocą &, a usuwaj za pomocą ~ i &.

using System;

[Flags]
public enum FileAccessMode
{
  None  = 0,
  Read  = 1,   // 0001
  Write = 2,   // 0010
  Exec  = 4    // 0100
}

public class Program
{
  public static void Main(string[] args)
  {
    FileAccessMode m = FileAccessMode.Read | FileAccessMode.Write; // combine
    Console.WriteLine("Mode = " + m); // prints "Read, Write"

    // Test a flag (two common patterns)
    bool canWrite = (m & FileAccessMode.Write) != 0;
    Console.WriteLine("Can write? " + canWrite);

    // Remove a flag
    m = m & ~FileAccessMode.Write;
    Console.WriteLine("After remove: " + m);
  }
}

Wskazówki dotyczące typów wyliczeniowych

Wskazówki:

  • Przypisuj wartości jawnie i zachowaj ich stabilność.
  • W przypadku [Flags] używaj potęg dwójki i uwzględnij wartość None = 0.
  • Waliduj dane wejściowe za pomocą Enum.TryParse/IsDefined.
  • Unikaj surowych liczb całkowitych w publicznych interfejsach API; preferuj typy wyliczeniowe.

Znaczenie atrybutu [Flags]

Szybkie sprawdzenie: Który atrybut pozwala typowi wyliczeniowemu reprezentować łączone opcje bitowe, takie jak Read | Write?

Podsumowanie

Podsumowanie: Używaj typów wyliczeniowych do definiowania czytelnych i bezpiecznych typów stałych. Bezpiecznie parsuj dane i sprawdzaj ich poprawność. W przypadku łączonych opcji dodaj [Flags] i używaj operatorów bitowych do ustawiania, sprawdzania oraz usuwania flag.

Często zadawane pytania

Czy lekcja „Enumy i [Flags]” jest bezpłatna?

Tak — pełny tekst „Enumy i [Flags]” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „Enumy i [Flags]”?

Definiuj enumy z jawnymi wartościami i typami bazowymi, bezpiecznie konwertuj i analizuj ich wartości oraz modeluj łączone opcje za pomocą [Flags]. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „Enumy i [Flags]”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Struktury: semantyka wartości i wzorzec niezmienności
  2. Typy podobne do rekordów i równość oparta na wartościach (wzorzec)
  3. Enumy i [Flags]
← Powrót do C# Academy