欢迎光临散文网 会员登陆 & 注册

【C#】true 和 false 运算符(不是字面量哦~)

2022-09-01 10:29 作者:SunnieShine  | 我要投稿

逻辑元运算符(true、false 运算符)


语法

public static bool operator true/false(T variable);


目的

true 和 false 运算符的重载目的就是为了让对象谓词化。


重载规则和约定

  1. true 和 false 运算符必须返回 bool 类型。
  2. true 和 false 运算符必须只带有一个参数,参数必须是当前类型。
  3. true 和 false 运算符必须同时重载,虽然在条件判断使用的过程之中只会用 true 运算符的判断过程。
  4. true 和 false 运算符在重载的时候,逻辑要写成一对相反的情况。
  5. 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”。

【C#】true 和 false 运算符(不是字面量哦~)的评论 (共 条)

分享到微博请遵守国家法律