【C#】true 和 false 运算符(不是字面量哦~)
2022-09-01 10:29 作者:SunnieShine | 我要投稿

逻辑元运算符(true、false 运算符)
语法
public static bool operator true/false(T variable);
目的
true 和 false 运算符的重载目的就是为了让对象谓词化。
重载规则和约定
- true 和 false 运算符必须返回 bool 类型。
- true 和 false 运算符必须只带有一个参数,参数必须是当前类型。
- true 和 false 运算符必须同时重载,虽然在条件判断使用的过程之中只会用 true 运算符的判断过程。
- true 和 false 运算符在重载的时候,逻辑要写成一对相反的情况。
- true 和 false 运算符最终的返回表达式不要写成常量或常量表达式,否则定义的这个运算符就没有任何意义。
用法
- 谓词化(直接写在作为条件判断的地方上)。比如:if (条件)、while (条件)、do-while(条件)、for(;条件;)、条件 ? t : f
- 这些用法都会自动调用 true 运算符,此时 false 运算符是没有用到的。
- 隐式重载 && 和 || 运算符。
要想对象可以重载 && 运算符,至少要求对象有 & 运算符和逻辑元运算符两个的重载。
要想对象可以重载 || 运算符,至少要求对象有 | 运算符和逻辑元运算符两个的重载。
a && b 等价于:false(a) ? a : a & b
a || b 等价于:true(a) ? a : a | b
需要注意的地方
为什么 a && b 要翻译成“false(a) ? a : a & b”而不是“false(a) ? a : b”呢?
因为考虑到语法、语义的严谨性,如果只将 b 作为返回的话,此时计算规则得到的最终结果只跟 a 或者 b 的其中一个对象有关系了,这样就达不到逻辑运算。
需要保证和满足的点:两个都得计算,其中一个成立还不行,还需要另外一个也成立。
同理,a || b 也必须翻译成“true(a) ? a : a | b”而不是“true(a) ? a : b”。