您可以重载运算符true和false我查看了示例并找到了这个http://msdn.microsoft.com/en-us/library/aa691312%28v=vs.71%29.aspx
我完全不明白他们是如何工作的.我知道如果我写if(obj)并且true返回true则执行if.什么是错误的回报并不重要.但假工作怎么样?在该文档中,建议&&运算符使用它.我写了下面的代码.我不知道如何让&&编译.|| 也给了我一个编译错误.我怎么会被称为虚假?以及如何获得&&和|| 上班?
var ts= new MyTimeSpan();// ts += ts;
if (ts){ Console.WriteLine("Is true"); }
else { Console.WriteLine("not true"); }
//Console.WriteLine(ts && ts ? "Y" : "N");
class MyTimeSpan
{
public static MyTimeSpan operator +(MyTimeSpan t, MyTimeSpan t2) { return new MyTimeSpan(); }
public static bool operator true(MyTimeSpan t) { return true; }
public static bool operator false(MyTimeSpan t) { return false; }
}
Run Code Online (Sandbox Code Playgroud)
Cod*_*aos 21
短路操作符的定义属性是,如果左侧已经确定结果,则不需要评估右侧.因为or如果左侧是true结果将在任何情况下都是真的,并且没有必要评估右侧.因为and它是相同的,除非左侧是false结果将是假的.
你需要超载两者|并true获得||.并&和false获得&&.
a||b对应的东西就像op_true(a)?a:(a|b).因此,如果true运算符返回true,则不需要计算b的表达式.
a&&b对应的东西就像op_false(a)?a:(a&b).因此,如果false运算符返回true,则不需要计算b的表达式.
在创建自定义布尔类型时,重载短路运算符很有用,例如可空的bool(参见参考资料DBBool)
当超载true和false运营商,他们不会仅仅返回true和false,它们被用来确定您的类型的值被认为是真还是假.
例如,如果类中的零值表示false,则非零值表示true:
public static bool operator true(MyTimeSpan t) { return t.Value != 0; }
public static bool operator false(MyTimeSpan t) { return t.Value == 0; }
Run Code Online (Sandbox Code Playgroud)
由于运算符彼此相反,编译器不需要使用它们来确定值是true还是false.如果编写if(obj),编译器将使用true运算符来确定值是否为true.