C#-|和&;操作员
本文关键字:操作员 amp C#- | 更新日期: 2023-09-27 18:19:53
edit:我现在的主要问题是为什么这两个运算符需要重载才能使用&;和||运算符。短路运算器不是会取对象的真值或假值并进行比较吗?在使用&;和||运算符是|和&习惯于
我正在阅读完整的参考文献C#,我对|和&操作员。我习惯了它们是比较两个整数的位的逐位运算符,但它们被解释为原始的逻辑运算符&和||是短路版本,当语句肯定是某个值时,它们会停止测试值。
这是否意味着这两个操作符有多种用途,或者C#确实做了一些幕后类型的转换?
此外,当使用&;和类上的||运算符,为什么|和&必须超载?为什么一个类的true和false值不能重载?
|
和&
运算符是整数上的逐位运算,布尔值上的渴望逻辑运算符。||
和&&
运算符是布尔上的懒惰逻辑运算符。
此外,当使用&;和类上的||运算符,为什么|和&必须超载?为什么一个类的true和false值不能重载?
您有一个类Foo,它带有一个重载的true和false运算符。您希望Foo上的&&
运算符接受两个Foo并返回第三个Foo。解释您计划如何只使用true和false运算符来执行此操作。
为什么我们在C#中需要热切的布尔逻辑运算符?
如果要评估两个布尔返回值的副作用并对其应用逻辑运算。
我不明白,有了&;和||运算符,我希望返回bool,而不是其他类型。
那么您就不需要重载任何内容。只需编写一个从Foo到bool的隐式转换运算符,就可以使用|,||,&和&;尽情享受。
仅仅因为你不想有一个&;或||运算符返回除bool以外的内容并不意味着没有人返回。假设您希望编写一个三值逻辑运算符而不是Foo,其中的值可以是True、False或两者都不是。你可以定义&以及|和&;以及True、False和None上的||运算符。显然,您不希望运算符返回bool;您希望它们返回True、False或两者都不返回。
我不明白的是;运营商必须与&;和||运算符。
它们是完全相同的运算符。唯一的区别是,如果不必要,惰性操作数不会计算第二个操作数。
为什么必须|和&被重载以使用||和&;虽然
请参阅前面的问答。
|和&运算符取两个操作数。
是的&和||运算符。
我没想到能在网上找到答案,否则我不会在这里问,但我确实做到了,下面是我所拥有的:
发件人http://msdn.microsoft.com/en-us/library/aa691312(v=vs.71).aspx它说:The operation x && y is evaluated as T.false(x) ? x : T.&(x, y)
换句话说,它计算x的true或false,如果x为false,则返回x,否则返回x & y
。这就解释了为什么两个|和&运算符需要重载&;和||,但它没有解释为什么它没有被评估为:
T.false(x) ? x : T.false(y) ? y : x
如果有人能解释为什么将y和x进行比较,我将不胜感激。