我如何重写&&(逻辑和运算符)
本文关键字:逻辑和 运算符 何重写 重写 | 更新日期: 2023-09-27 18:04:02
其他似乎都遵循这个模式,但是当我尝试:
public static ColumnOperation operator&&(ColumnOperation lhs, ColumnOperation rhs)
{
return new ColumnBooleanOperation(lhs, rhs, ExpressionType.And);
}
我得到"期望可重载二进制运算符"。我做错了什么?
不能重载条件逻辑运算符。
根据文档:
条件逻辑运算符不能重载,但使用&和|求值,可重载。
本文提供了关于如何实现您自己的自定义&&和||操作符的更多信息。
不能直接重载&&
,但可以重载false
、true
和&
运算符——参见operator &&
public static bool operator true(ColumnOperation x)
{
...
}
public static bool operator false(ColumnOperation x)
{
...
}
public static ColumnOperation operator &(ColumnOperation lhs, ColumnOperation rhs)
{
return new ColumnBooleanOperation(lhs, rhs, ExpressionType.And);
}
提供相同的功能。具体来说,从这里开始:
操作
x && y
被求值为T.false(x) ? x : T.&(x, y)
[…]
首先计算x
,然后对结果调用运算符false
来确定x
是否绝对为假。然后,如果x
确定为false,则操作的结果是先前为x
计算的值。
这表明当正确实现上述过载时,短路评估也将按预期工作。重载|
也可以用类似的方式完成。
查看可重载操作符的MSDN页面:
条件逻辑操作符不能重载,但使用&和|,可以重载。
指&&
和||
操作符。
所以,简而言之,重写&
,您将获得&&
与它一起免费。
From this:
&&, ||:条件逻辑操作符不能重载,但可以重载使用&和|,可以重载。
你不能重写它,但是你可以重写&
或者|