Ho letto di overloading true e false in C# e penso di capire la differenza fondamentale tra questo e definire un operatore bool. L'esempio che vedo in giro è qualcosa di simile:Perché sovraccaricare true e false invece di definire l'operatore bool?
public static bool operator true(Foo foo) {
return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
return (foo.PropA <= 0);
}
Per me, questo è lo stesso che dire:
public static implicit operator bool(Foo foo) {
return (foo.PropA > 0);
}
La differenza, per quanto posso dire, è che attraverso la definizione di vero e falso a parte, si può avere un oggetto che è allo stesso tempo vero e falso, o né vere né 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; }
sono sicuro che c'è un motivo per cui questo è consentito, ma non riesco proprio a pensare a quello che è. Per me, se vuoi che un oggetto possa essere convertito in vero o falso, un singolo operatore bool ha più senso.
Qualcuno può darmi uno scenario in cui ha senso farlo in un altro modo?
Grazie
Ho appena trovato anche questi operatori e ho fatto alcuni test. Sembra che 'if' usi solo l'operatore' true' e 'if (! MyObj)' non sia affatto possibile, quindi non ha senso (ancora) implementare un operatore 'false' contraddittorio. Mi sono perso qualcosa? Come posso usare l'operatore 'false'? – ygoe