Parce que ce sont des puissances 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
}
Il s'agit d'un champ de bits, où chaque bit activé correspond à une permission (ou à ce à quoi la valeur énumérée correspond logiquement). Si elles étaient définies comme 1, 2, 3, ...
vous ne seriez pas en mesure d'utiliser les opérateurs binaires de cette manière et d'obtenir des résultats significatifs. Pour aller plus loin...
Permissions.Read == 1 == 00000001
Permissions.Write == 2 == 00000010
Permissions.Delete == 4 == 00000100
Vous remarquez un modèle ici ? Maintenant, si nous reprenons mon exemple original, c'est-à-dire,
var permissions = Permissions.Read | Permissions.Write;
Alors...
permissions == 00000011
Tu vois ? Les deux Read
y Write
sont activés, et je peux le vérifier indépendamment (remarquez également que le fichier Delete
est no et donc cette valeur ne donne pas l'autorisation de supprimer).
Il permet de stocker plusieurs drapeaux dans un seul champ de bits.