Тому що вони є двома силами, і я можу це зробити:
var permissions = Permissions.Read | Permissions.Write;
І, можливо, пізніше ...
if( (permissions & Permissions.Write) == Permissions.Write )
{
// we have write access
}
Це бітове поле, де кожному встановленому біту відповідає якийсь дозвіл (або все, що логічно відповідає переліченому значенню). Якби вони були визначені так, 1, 2, 3, ...
ви б не змогли таким чином використовувати побітові оператори та отримати значущі результати. Поглибитися глибше ...
Permissions.Read == 1 == 00000001
Permissions.Write == 2 == 00000010
Permissions.Delete == 4 == 00000100
Помітили тут шаблон? Тепер якщо ми візьмемо мій оригінальний приклад, тобто
var permissions = Permissions.Read | Permissions.Write;
Тоді...
permissions == 00000011
Побачити? І біти, Read
і Write
біти встановлені, і я можу перевірити це незалежно (Також зауважте, що Delete
біт не встановлено, і тому це значення не містить дозволу на видалення).
Це дозволяє зберігати кілька прапорів в одному полі біт.