假设我有一个对象可能处于一个或多个true/false状态,我一直有点糊涂,为什么程序员经常使用标志+位掩码而不是只使用几个布尔值。
.NET框架中到处都是这种情况。 不确定这是否是最好的例子,但.NET框架具有以下内容:
public enum AnchorStyles
{
None = 0,
Top = 1,
Bottom = 2,
Left = 4,
Right = 8
}
给定一个锚点样式,我们可以使用位掩码来确定哪些状态被选中。但是,似乎也可以通过定义每个可能值的布尔属性的AnchorStyle类/结构体或单独枚举值的数组来实现同样的功能。
当然,我提出这个问题的主要原因是我想知道是否应该在我的代码中遵循类似的做法。
那么,为什么要使用这种方法呢?
- 内存消耗更少吗?(它似乎不会比布尔数组/结构体消耗更少)
- 比结构体或数组更好的堆栈/堆性能?
- 比较操作更快吗?添加/删除值更快吗?
- 对编写它的开发人员更方便吗?