權限系統:用戶可能同時擁有多個權限。若為每種組合定義新類型(如 AB、ABC、BC),組合爆炸難以維護。
[Flags]
public enum Privilege {
Read = 0x01, // 0001
Write = 0x02, // 0010
Add = 0x04, // 0100
Delete = 0x08 // 1000
}
// 調用方:任意組合
GetPrivilege(Privilege.Read | Privilege.Write);
GetPrivilege(Privilege.Read | Privilege.Write | Privilege.Add);
// 處理方:& 判斷單個位
public void GetPrivilege(Privilege p) {
if ((p & Privilege.Read) == Privilege.Read) { /* 讀權限邏輯 */ }
if ((p & Privilege.Write) == Privilege.Write) { /* 寫權限邏輯 */ }
if ((p & Privilege.Add) == Privilege.Add) { /* 增權限邏輯 */ }
if ((p & Privilege.Delete) == Privilege.Delete) { /* 刪權限邏輯 */ }
}
| (OR) 合併位:任一為 1 則結果為 1& (AND) 檢測位:雙方為 1 才為 1例:Read(0001) | Delete(1000) = 1001。檢測 & Read = 0001 真,& Delete = 1000 真,其他為 0。
[Flags])HasFlag (NET 4.0+):p.HasFlag(Privilege.Read) 更簡潔p &= ~Privilege.Writep ^= Privilege.Add