且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

为什么要重载true和false而不是定义bool运算符?

更新时间:2022-10-15 17:55:37

文档说,重载truefalse旨在支持(可为空)数据库类型(是/否,是/否,0/1等).>

当然,与任何运算符一样,它们的定义也可能不一致.您有责任退还明智的东西.编译器只需要一个或两个都不需要.

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

As the docs say, overloading true and false is intended to support (nullable) database-types (Yes/No, Y/N, 0/1, etc).

And of course you can define them inconsistently, as with any operator. It is your responsibility to return something sensible. The compiler goes no further than requiring neither or both.