Я читал о перегрузке true и false на С#, и я думаю, что понимаю основную разницу между этим и определяя оператор 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);
}
Различие, насколько я могу судить, заключается в том, что, определяя true и 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; }
Я уверен, что есть причина, по которой это разрешено, но я просто не могу придумать, что это такое. Для меня, если вы хотите, чтобы объект мог быть преобразован в true или false, один оператор bool имеет наибольший смысл.
Может ли кто-нибудь дать мне сценарий, когда имеет смысл сделать это другим путем?
Спасибо