Why overload true and false instead of defining bool operator?
- by Joe Enos
I've been reading about overloading true and false in C#, and I think I understand the basic difference between this and defining a bool operator. The example I see around is something like:
public static bool operator true(Foo foo) {
return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
return (foo.PropA <= 0);
}
To me, this is the same as saying:
public static implicit operator bool(Foo foo) {
return (foo.PropA > 0);
}
The difference, as far as I can tell, is that by defining true and false separately, you can have an object that is both true and false, or neither true nor false:
public static bool operator true(Foo foo) { return true; }
public static bool operator false(Foo foo) { return true; }
//or
public static bool operator true(Foo foo) { return false; }
public static bool operator false(Foo foo) { return false; }
I'm sure there's a reason this is allowed, but I just can't think of what it is. To me, if you want an object to be able to be converted to true or false, a single bool operator makes the most sense.
Can anyone give me a scenario where it makes sense to do it the other way?
Thanks