Ich habe über das Überladen von True und False in C# gelesen, und ich denke, ich verstehe den grundlegenden Unterschied zwischen diesem und der Definition eines Bool-Operators. Das Beispiel, das ich um zu sehen ist so etwas wie:Warum überladen wahr und falsch statt Bool Operator zu definieren?
public static bool operator true(Foo foo) {
return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
return (foo.PropA <= 0);
}
Für mich ist dies die gleiche wie zu sagen:
public static implicit operator bool(Foo foo) {
return (foo.PropA > 0);
}
Der Unterschied, soweit ich das beurteilen kann, ist, dass durch wahr und falsch zu definieren getrennt, können Sie ein Objekt haben, die sowohl wahr und falsch, oder nicht wahr oder falsch ist:
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; }
ich bin sicher, es gibt einen Grund, dies ist erlaubt, aber ich glaube einfach nicht, was es ist. Wenn Sie möchten, dass ein Objekt in "true" oder "false" konvertiert werden kann, ist ein einzelner Bool-Operator für mich am sinnvollsten.
Kann mir jemand ein Szenario geben, wo es Sinn macht, es anders zu machen?
Dank
Ich habe gerade diese Operatoren gefunden und einige Tests durchgeführt. Es scheint, als ob 'if' nur den' true'-Operator verwendet und 'if (! MyObj)' gar nicht möglich ist, so dass es (noch) keinen Sinn macht, einen widersprüchlichen 'false'-Operator zu implementieren. Habe ich etwas vergessen? Wie kann ich den Operator 'false' überhaupt verwenden? – ygoe