Zrozumieć C# Set Flag Enum: Przypisywanie flag
Pracując z uprawnieniami, konfiguracjami lub ustawieniami w C#, często spotykamy się z sytuacjami, w których trzeba przechować wiele wartości w jednej zmiennej. Zamiast używać oddzielnych wartości logicznych dla każdego ustawienia, możemy użyć flag Enum. Ta metoda wykorzystuje operacje binarne do efektywnego zarządzania wieloma opcjami w jednej wartości liczbowej.
W tym artykułe przyjrzymy się bliżej, jak ustawiać flagi Enum w C# na podstawie filmu Tima Coreya, Binary in C#: Assigning Flags in 10 Minutes or Less. Tim pokazuje, jak przypisać wiele wartości za pomocą operacji binarnych, co sprawia, że nasz kod jest bardziej efektywny i czytelny. Zanurzmy się w temat.
Wprowadzenie do flag Enum
Tim zaczyna od wyjaśnienia, że ta lekcja jest częścią serii na temat zrozumieniuiuiuiuia binariów w C#. W szczególności w tym filmie skupia się na tym, jak przypisywać flagi za pomocą operacji binarnych. Flagi pozwalają przechowywać wiele wartości w jednej liczbie całkowitej, co znacznie ułatwia i usprawnia zarządzanie uprawnieniami.
Przypisywanie wielu flag za pomocą bitowego OR
Tim demonstruje, jak możemy łączyć wiele uprawnień za pomocą bitowego operatora OR (|) Tworzy wyliczenie SystemPermissions, które obejmuje różne poziomy uprawnień, takie jak SQL, Redis i BuildSystem. Zamiast używać wielu zmiennych, możemy przechowywać wszystkie uprawnienia w jednej wartości.
Przykład przypisania wielu uprawnień do zmiennej:
// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;
// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);
// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;
// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);
Wyświetlanie reprezentacji binarnej
Aby lepiej zrozumieć, co się dzieje, Tim sugeruje konwersję wartości całkowitej do jej formy binarnej za pomocą Convert.ToString(value, 2). Pozwala to wizualizować, które bity są ustawione:
// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));
// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));
Pokazuje to, że różne pozycje bitowe odpowiadają różnym uprawnieniom, demonstrując, jak można przechowywać wiele ustawień w jednej liczbie całkowitej.
Dodawanie większej liczby uprawnień za pomocą OR-Equals
Tim wyjaśnia, że możemy dynamicznie dodawać więcej uprawnień za pomocą operatora `|=
// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;
// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);
// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;
// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);
Rozumienie limitu 32-bitowego
Tim podkreśla ważną kwestię: typ danych liczbowych w C# ma limit 32-bitowy. Oznacza to, że możemy przechowywać tylko do 32 unikalnych flag w int. Jeśli potrzebujemy więcej niż 32 flagi, powinniśmy rozważyć użycie long (64-bitowe) lub nawet kilku wartości. Jednakże, w większości przypadków 32 flagi są więcej niż wystarczające.
Przechowywanie flag w bazie danych
Jedną z największych zalet używania flag Enum jest to, że można je wydajnie przechowywać w bazie danych. Zamiast przechowywać wiele kolumn logicznych, możemy przechowywać jedną wartość liczbową reprezentującą wszystkie uprawnienia. Tim wyjaśnia, że takie podejście znacząco zmniejsza złożoność bazy danych i wymagania dotyczące przechowywania.
Na przykład, jeśli TimPermissions jest przechowywana jako 37, reprezentuje kombinację:
- SQL (bit 1)
- Redis (bit 3)
- BuildSystem (bit 5)
Kiedy pobieramy tę wartość z bazy danych, możemy łatwo ją zdekodować, aby określić aktywne uprawnienia.
Wnioski
Tim kończy, podkreślając moc flag Enum. Korzystając z operacji binarnych, możemy efektywnie zarządzać wieloma stanami w jednej liczbie całkowitej. Ta technika poprawia wydajność, upraszcza przechowywanie danych i czyni nasz kod bardziej czytelnym.
Stosując to podejście, można wdrożyć czysty, skalowalny system zarządzania uprawnieniami przy użyciu flag Enum w C#. Obejrzyj pełny film, aby lepiej zrozumieć.
