Warum überlast true und false anstelle der Definition der bool-operator?
Ich ve wurde Lesen über überlastung true und false in C#, und ich glaube, ich verstehe den grundlegenden Unterschied zwischen dieser und definieren einer bool-operator. Das Beispiel sehe ich etwa so etwas wie:
public static bool operator true(Foo foo) {
return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
return (foo.PropA <= 0);
}
Mir, das ist das gleiche wie zu sagen:
public static implicit operator bool(Foo foo) {
return (foo.PropA > 0);
}
Den Unterschied, soweit ich sagen kann, ist, dass durch die Definition von wahr und falsch getrennt, können Sie ein Objekt haben, das ist zugleich richtig und falsch oder weder wahr noch falsch:
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, warum das erlaubt ist, aber ich kann einfach nicht denken, was es ist. Zu mir, wenn Sie möchten, dass ein Objekt konvertiert werden kann, um wahr oder falsch, ein einzelnes bool operator am meisten Sinn macht.
Kann mir jemand ein Szenario wo es Sinn macht, es zu tun die andere Weise?
Dank
- Ich habe gerade gefunden diese Operatoren als gut und hat einige tests. Es scheint, wie
if
verwendet nur dietrue
Betreiber, undif (!myObj)
ist gar nicht möglich, so gibt es keinen Punkt (noch) in der Umsetzung einer widersprüchlichenfalse
Betreiber. Hab ich was verpasst? Wie kann ich diefalse
operator überhaupt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als die docs sagen, überlastung
true
undfalse
unterstützt werden sollen (nullable) Datenbank-Typen (Yes/No, Y/N, 0/1, usw.).Natürlich können Sie dabei definieren Sie uneinheitlich, als mit einem Betreiber. Es liegt in Ihrer Verantwortung wieder zurückgeben, sinnvoll. Der compiler geht nicht weiter als benötigt weder oder beides.
Ich hatte keine Ahnung, diese Operatoren existiert. Das bedeutet, dass Sie implementieren können, ist die selbst-Negierung paradox:
So, jetzt kennen wir die wahre Lösung für dieses klassische Paradoxon... StackOverflowException.
Habe ich Menschen gesehen, die überlastung der
true
undfalse
überlastungen führen, um schlaue Dinge wie Ausdrücke in .NET 2.0, bevor Linq existierte.Ayende geklappt, eine syntax wie diese zu bauen NHibernate Kriterien Abfragen, mit seinem NHQG Projekt:
Je nach system, true, werden alle nicht-null-Wert. In anderen, es kann jeden positiven Wert.
Andere Systeme sind nicht wirklich boolean, und eine Dritte Zustand null oder nill für die boolean-Werte, die ist, warum Sie möglicherweise überlastung wahr und falsch, gegen eine überlastung einer einzelnen bool operator.