Przejdź do treści stopki
Iron Academy Logo
Naucz się C#
Naucz się C#

Inne Kategorie

Zrozumieć C# Set Flag Enum: Przypisywanie flag

Tim Corey
9m 57s

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ć.

Hero Worlddot related to Zrozumieć C# Set Flag Enum: Przypisywanie flag
Hero Affiliate related to Zrozumieć C# Set Flag Enum: Przypisywanie flag

Zarabiaj więcej, dzieląc się tym, co kochasz

Tworzysz treści dla deweloperów pracujących z .NET, C#, Java, Python, czy Node.js? Zamień swoją wiedzę specjalistyczną na dodatkowy dochód!

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie