เพราะมันเป็นพลังของสองและฉันสามารถทำสิ่งนี้:
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
บิตไม่ได้ถูกตั้งค่าและดังนั้นค่านี้จึงไม่อนุญาตให้ลบ
อนุญาตให้หนึ่งเก็บหลายแฟล็กในฟิลด์เดียวของบิต