如何在C#中执行按位OR(|=
)运算符的反转?我可以使用C#中的NOR按位运算符吗?
情境:
我从.NET框架继承了一个基类。该类具有设置标志的操作。
示例: flags |= 0x200;
在我的派生类中,我想省略此标志设置,就好像操作flags |= 0x200;
从未发生过一样。
有没有办法实现这个目标?
答案 0 :(得分:8)
您可以与要删除的值的反向(&
)进行AND(~
):
flags &= ~0x200;
如果您打算确保未设置此标志。如果您要撤消之前对此标志的更改,那么正如@Russell所说,XOR可能就是您所追求的。
答案 1 :(得分:5)
您可以对标志进行异或以删除它
flags ^= 0x200
如果该标志关闭,同样的操作也将打开该标志。与掩码的异或表现为切换。
答案 2 :(得分:1)
不是XOR工作吗? flags ^ 0x200
答案 3 :(得分:0)
您很难知道标志的原始值是否设置了这些位。当你的代码执行时,标志已经0x200
,那么你的操作不会改变任何xor nor和nor,或者将确保检索先前的值。我看到的一种方法是在虚方法中进行此操作,并在派生类中覆盖它而不进行任何更改。另一种方法是将此魔术值设为属性,并将其在派生类构造函数中设置为0.这将阻止更改。