C#-|和&;操作员

本文关键字:操作员 amp C#- | 更新日期: 2023-09-27 18:19:53

edit:我现在的主要问题是为什么这两个运算符需要重载才能使用&和||运算符。短路运算器不是会取对象的真值或假值并进行比较吗?在使用&和||运算符是|和&习惯于

我正在阅读完整的参考文献C#,我对|和&操作员。我习惯了它们是比较两个整数的位的逐位运算符,但它们被解释为原始的逻辑运算符&和||是短路版本,当语句肯定是某个值时,它们会停止测试值。

这是否意味着这两个操作符有多种用途,或者C#确实做了一些幕后类型的转换?

此外,当使用&和类上的||运算符,为什么|和&必须超载?为什么一个类的true和false值不能重载?

C#-|和&;操作员

|&运算符是整数上的逐位运算,布尔值上的渴望逻辑运算符。||&&运算符是布尔上的懒惰逻辑运算符。

此外,当使用&和类上的||运算符,为什么|和&必须超载?为什么一个类的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进行比较,我将不胜感激。