Зачем перегружать true и false вместо определения оператора bool?

Я читал о перегрузке true и false в C #, и я думаю, что понимаю основное различие между этим и определением оператора bool. Пример, который я вижу вокруг, выглядит примерно так:

public static bool operator true(Foo foo) {
  return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
  return (foo.PropA <= 0);
}

Для меня это то же самое, что сказать:

public static implicit operator bool(Foo foo) {
  return (foo.PropA > 0);
}

Разница, насколько я могу судить, состоит в том, что, определяя истину и ложь по отдельности, вы можете получить объект, который является как истинным, так и ложным, или ни истиной, ни ложью:

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; }

Я уверен, что есть причина, по которой это разрешено, но я просто не могу понять, что это такое. На мой взгляд, если вы хотите, чтобы объект мог быть преобразован в true или false, наиболее логичным является единственный оператор bool.

Кто-нибудь может дать мне сценарий, в котором имеет смысл сделать это по-другому?

Спасибо

Ответы на вопрос(4)

Ваш ответ на вопрос