C# – | 和&运营商?

编辑:我现在的主要问题是为什么需要重载这两个运算符才能使用&&和|| 运营商。 短路运营商不会采用对象的真值或假值并进行比较吗? 在哪里使用&&和|| 运营商是 和&使用?

我正在读C#,完整的参考资料,我对|很困惑 和&运营商。 我习惯于将它们作为比较运算符来比较两个整数的位,但它们被解释为原始逻辑运算符,其中&&和|| 是短语版本,当语句肯定是某个值时,它会停止测试值。

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

此外,使用&&和||时 一个类的运算符,为什么这样做 并且必须超载? 为什么不能只重载类的真值和假值?

|&运算符是对布尔运算符上的整数和急切逻辑运算符的按位运算。 ||&&运算符是布尔运算符上的惰性逻辑运算符。

此外,使用&&和||时 一个类的运算符,为什么这样做 并且必须超载? 为什么不能只重载类的真值和假值?

你有一个Foo类,它有一个重载的true和false运算符。 你希望Foo上的&&运算符取两个Foos并返回第三个。 解释你打算如何只使用真假运算符。

为什么我们需要在C#中使用热切的布尔逻辑运算符?

如果您想评估两个布尔返回值的副作用并对它们应用逻辑运算。

我不明白,使用&&和|| 运营商,我想要一个bool返回,而不是另一种类型。

然后你不需要重载任何东西。 只需将一个隐式转换运算符从Foo编写为bool,您就可以使用|,||,&和&&来表达您的内心。

只是因为不想要一个&&或|| 返回除bool之外的其他东西的运算符并不意味着没有人这样做。 假设你想要写一个三值逻辑运算符而不是Foo,其值可以是True,False或Nither。 你可以定义&和| 和&&和|| 运营商是真,假,都不是。 显然你不希望运营商返回bool; 你希望他们返回True,False或Neither。

我不明白的是什么 和&运算符与&&和||有关 运营商。

他们是完全相同的运营商 。 唯一的区别是,如果这样做是不必要的,那么懒惰的不会评估第二个操作数。

为什么必须| 和&重载使用|| 和&&虽然?

请参阅上一个问题和答案。

| 和&运营商采取两个操作数。

是的,他们这样做。 &&和||也是如此 运营商。

我没想到能够在网上找到答案,否则我不会在这里问,但我确实设法了,这就是我所拥有的:

从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) The operation x && y is evaluated as T.false(x) ? x : T.&(x, y)

换句话说,它评估x的真或假,如果x为假,则返回x,否则返回x & y 。 这可以解释为什么两个| 和&运算符需要为&&和||重载,但它没有解释为什么它不被评估为:

 T.false(x) ? x : T.false(y) ? y : x 

如果有人能解释为什么y和x被比较,我将不胜感激。