He estado leyendo sobre la sobrecarga de verdadero y falso en C#, y creo que entiendo la diferencia básica entre esto y la definición de un operador bool. El ejemplo que veo alrededor es algo así como:¿Por qué sobrecargar verdadero y falso en lugar de definir el operador bool?
public static bool operator true(Foo foo) {
return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
return (foo.PropA <= 0);
}
Para mí, esto es lo mismo que decir:
public static implicit operator bool(Foo foo) {
return (foo.PropA > 0);
}
La diferencia, por lo que yo puedo decir, es que mediante la definición verdadero y falso por separado, puede tener un objeto que es a la vez verdadera y falsa o verdadera ni falsa:
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; }
estoy seguro de que hay una razón esto está permitido, pero simplemente no puede pensar en lo que es. Para mí, si quieres que un objeto se convierta en verdadero o falso, un solo operador de bool tiene más sentido.
¿Alguien puede darme un escenario donde tiene sentido hacerlo de otra manera?
Gracias
Acabo de encontrar estos operadores también e hice algunas pruebas. Parece que 'if' solo utiliza el operador' true', y 'if (! MyObj)' no es posible en absoluto, por lo que no tiene sentido (todavía) implementar un operador 'falso' contradictorio. ¿Yo me perdí algo? ¿Cómo puedo usar el operador 'false' en absoluto? – ygoe