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