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]
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
- Struktury: semantyka wartości i wzorzec niezmienności
- Typy podobne do rekordów i równość oparta na wartościach (wzorzec)
- Enumy i [Flags]