在《C#12 In a Nutshell》(第 259 页,第重载 true 和 false 章)一书中,他们为我们提供了这个例子来说明如何重载 true 和 false 运算符。
SqlBoolean a = SqlBoolean.Null;
if (a)
Console.WriteLine ("True");
else if (!a)
Console.WriteLine ("False");
else
Console.WriteLine ("Null");
public struct SqlBoolean
{
public static bool operator true (SqlBoolean x)
{
return x.m_value == True.m_value;
}
public static bool operator false(SqlBoolean x)
{
return x.m_value == False.m_value;
}
public static SqlBoolean operator ! (SqlBoolean x)
{
if (x.m_value == Null.m_value) return Null;
if (x.m_value == False.m_value) return True;
return False;
}
public static readonly SqlBoolean Null = new SqlBoolean (0);
public static readonly SqlBoolean False = new SqlBoolean (1);
public static readonly SqlBoolean True = new SqlBoolean (2);
SqlBoolean (byte value) { m_value = value; }
byte m_value;
}
我试图了解何时false
调用过载,并且根据我的理解(并通过使用调试器进行确认),似乎从未调用过过载。false
那么为什么过载会有用呢?由于我们只使用while (a)
或while (!a)
等...过载true
和!
还不够吗?
C# 标准有这样的说明:
通过这些链接,您会发现该
false
运算符用于条件逻辑运算符:下面是一些测试代码,展示了运算符的各种使用时间:
输出:
当涉及短路时,False 运算符将发挥作用 - 使用
&&
运算符,如果第一个表达式失败,我们可以忽略第二个表达式。在这种情况下,将调用 false 运算符,请看示例:
然后测试: