C#中有两个奇怪的运算符:
- the 真算子 http://msdn.microsoft.com/en-us/library/6x6y6z4d.aspx
- the 假算子 http://msdn.microsoft.com/en-us/library/6292hy1k.aspx
如果我理解正确,这些运算符可以用在我想使用而不是布尔表达式的类型中,并且我不想提供到 bool 的隐式转换。
假设我有以下课程:
public class MyType
{
public readonly int Value;
public MyType(int value)
{
Value = value;
}
public static bool operator true (MyType mt)
{
return mt.Value > 0;
}
public static bool operator false (MyType mt)
{
return mt.Value < 0;
}
}
所以我可以编写以下代码:
MyType mTrue = new MyType(100);
MyType mFalse = new MyType(-100);
MyType mDontKnow = new MyType(0);
if (mTrue)
{
// Do something.
}
while (mFalse)
{
// Do something else.
}
do
{
// Another code comes here.
} while (mDontKnow)
然而,对于上面的所有示例,仅执行 true 运算符。那么 C# 中的 false 运算符有什么用呢?
注:可以找到更多示例here http://www.java2s.com/Tutorial/CSharp/0160__Operator-Overload/truefalseoperatorforComplex.htm, here http://www.java2s.com/Tutorial/CSharp/0160__Operator-Overload/OverloadtrueandfalseforTwoDimension.htm and here http://www.java2s.com/Tutorial/CSharp/0160__Operator-Overload/trueandfalseoperator.htm.
您可以使用它来覆盖&&
and ||
运营商。
The &&
and ||
运算符不能被覆盖,但如果您覆盖|
, &
, true
and false
以编译器调用的正确方式|
and &
当你写的时候||
and &&
.
例如,看看这段代码(来自http://ayende.com/blog/1574/nhibernate-criteria-api-operator-overloading http://ayende.com/blog/1574/nhibernate-criteria-api-operator-overloading- 我从哪里知道这个技巧的;存档版本 http://web.archive.org/web/20080613013350/http://www.ayende.com/Blog/archive/2006/08/04/7381.aspx通过@BiggsTRC):
public static AbstractCriterion operator &(AbstractCriterion lhs, AbstractCriterion rhs)
{
return new AndExpression(lhs, rhs);
}
public static AbstractCriterion operator |(AbstractCriterion lhs, AbstractCriterion rhs)
{
return new OrExpression(lhs, rhs);
}
public static bool operator false(AbstractCriterion criteria)
{
return false;
}
public static bool operator true(AbstractCriterion criteria)
{
return false;
}
这显然是一个副作用,而不是它的预期使用方式,但它很有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)