Потому что они являются полномочиями двух, и я могу сделать это:
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
бит не установлен , и поэтому это значение не передает разрешение на удаление).
Это позволяет хранить несколько флагов в одном поле битов.