Parce qu'ils sont des pouvoirs de deux et que je peux le faire:
var permissions = Permissions.Read | Permissions.Write;
Et peut-être plus tard ...
if( (permissions & Permissions.Write) == Permissions.Write )
{
// we have write access
}
C'est un champ de bits, où chaque bit défini correspond à une autorisation (ou à toute autre valeur à laquelle correspond logiquement la valeur énumérée). Si ceux-ci étaient définis comme cela, 1, 2, 3, ...
vous ne seriez pas en mesure d'utiliser des opérateurs au niveau du bit de cette façon et d'obtenir des résultats significatifs. Pour approfondir ...
Permissions.Read == 1 == 00000001
Permissions.Write == 2 == 00000010
Permissions.Delete == 4 == 00000100
Remarquez un modèle ici? Maintenant, si nous prenons mon exemple original, à savoir,
var permissions = Permissions.Read | Permissions.Write;
Ensuite...
permissions == 00000011
Voir? Les bits Read
et Write
sont tous deux définis, et je peux le vérifier indépendamment (notez également que le Delete
bit n'est pas défini et que cette valeur ne transmet donc pas l'autorisation de suppression).
Il permet de stocker plusieurs indicateurs dans un seul champ de bits.