Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

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.
Tim zaczyna od wyjaśnienia, że ta lekcja jest częścią serii na temat zrozumienia 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.
Tim demonstruje, jak możemy łączyć wiele uprawnień za pomocą bitowego operatora OR (|) operator. Tworzy enumerację SystemPermissions, która zawiera 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
Dim TimPermissions As SystemPermissions = SystemPermissions.SQL Or SystemPermissions.Redis
' Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions)Aby lepiej zrozumieć, co się dzieje, Tim sugeruje konwersję wartości całkowitej na format binarny przy użyciu 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(CInt(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.
Tim wyjaśnia, że możemy dynamicznie dodawać więcej uprawnień za pomocą operatora `|= operator:
// 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 = TimPermissions Or SystemPermissions.BuildSystem
' Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions)Tim podkreśla ważną kwestię: typ danych liczbowych w C# ma limit 32-bitowy. Oznacza to, że możemy przechować tylko do 32 unikalnych flag w int. Jeśli potrzebujemy więcej niż 32 flagi, powinniśmy rozważyć użycie long (64-bitowego) lub nawet wielu wartości. Jednakże, w większości przypadków 32 flagi są więcej niż wystarczające.
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 przechowywane jako 37, reprezentuje kombinację:
Kiedy pobieramy tę wartość z bazy danych, możemy łatwo ją zdekodować, aby określić aktywne uprawnienia.
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łne wideo, aby lepiej zrozumieć.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy