Vous pouvez surcharger l'opérateur True et FALSE, j'ai regardé des exemples et j'ai trouvé ce http://msdn.microsoft.com/en-us/library/aa691312%28v=vs.71%29.aspx
Je ne comprends pas comment ils fonctionnent. Je sais si j'écris si (obj) et VRAI retournent true alors le si est exécuté. Cela ne comporte pas ce que les faux retours. Cependant, comment fonctionne le faux travail? Dans cette doc, il est suggéré que l'opérateur && l'utilise. J'ai écrit le code ci-dessous. Je ne sais pas comment obtenir && de compiler. || me donne aussi une erreur de compilation. Comment puis-je être appelé faux? et comment puis-je obtenir les && et || travailler? p>
3 Réponses :
La propriété de définition d'un opérateur de court-circuit est qu'il n'a pas besoin d'évaluer le côté droit si le côté gauche détermine déjà le résultat. Pour Vous devez surcharger les deux Surcharge des opérateurs de court-circuit est utile lors de la création d'un type booléen personnalisé, tel que Nullable Bools (voir ou code> si le côté gauche est
true code> le résultat sera vrai dans tous les cas et il est inutile d'évaluer le côté droit. Pour
et code> c'est la même chose, sauf que si le côté gauche est
false code> le résultat sera faux. P>
| code> et
true code> pour obtenir
|| code>. Et
& code> et
false code> pour obtenir
&& code>. P>
a || b code> correspond à quelque chose comme
op_true (a)? A: (A | B) code>. Donc, si le véritable opérateur revient vrai, il n'a pas besoin d'évaluer l'expression de b. P>
a && b code> correspond à quelque chose comme
op_false (a)? A: (A & B) code>. Donc, si le faux opérateur revient vrai, il n'a pas besoin d'évaluer l'expression de b. P>
dbbool code>) p>
Cela m'a confondu terriblement. Je pensais && comme si la gauche et le côté droit est à la fois vraie et je n'ai pas vu à quel point le logique et le concerne. Maintenant, je vois que cela fait une et entre les deux valeurs et les chèques si c'est vrai. Qui est bizarre pour moi. Cause 1 && 2 est illégale en C # et en C ++, il est vrai car il n'y a pas d'application logique et appliquée (1 & 2 == 0 == FAUX, dans ce code C, il dit que c'est vrai) CODEPAD.ORG/9ICAQZQ2
Vous n'avez pas besoin de répondre à celui-ci mais j'ai fait mon commentaire dans une question Stackoverflow.com/Questtions/5203498/...
@acid ma réponse a eu une grosse erreur. Peut-être que cela vous confondre.
Vous aurez besoin de remplacer & opérateur pour && et | ou ||.
quelque chose comme ceci: (juste un code factice) p>
Lorsque vous surchargez le Si, par exemple, une valeur zéro dans votre classe représente FALSE, une valeur non nulle représente TRUE: P> true code> et
false code> Les opérateurs, ils ne retiennent pas simplement
true code> et
false code>, ils sont Utilisé pour déterminer si une valeur de votre type est considérée comme vraie ou false.
public static bool operator true(MyTimeSpan t) { return t.Value != 0; }
public static bool operator false(MyTimeSpan t) { return t.Value == 0; }
+1. Voir aussi commentaire que j'ai laissé dans ma question ou le même commentaire sur cette réponse Stackoverflow.com/Questtions/5203093/...
Vous n'avez pas besoin de répondre à celui-ci mais j'ai fait mon commentaire dans une question Stackoverflow.com/Questtions/5203498/...
Si X est un type arbitraire qui remplace les opérateurs, mais on ne sait rien d'autre à ce sujet, existe-t-il un moyen de déterminer si x est "faux" (par opposition à ne pas être simplement "vrai")?
@supercat: Je ne suis pas sûr. J'ai essayé de différentes manières de le tester, mais je n'ai pas trouvé de moyen d'utiliser l'opérateur faux code> sans surcharger l'opérateur
& code>.
@Guffa: c'est trop mauvais si code> utilise l'opérateur code> true code> plutôt que de tenter une extinction implicite à
bool code> ou d'avoir une syntaxe spécifiquement pour utiliser le < code> true code> et
false code> opérateurs [par exemple
Si true (threestateConditionnemental) {codeIftRue} else si faux {codeiffalse} else {codeIfneNe} ele {codeIfne} code>] Le fait qu'un type prend en charge les opérateurs court-circuités ne signifie pas nécessairement qu'il doit être directement utilisable comme une condition.
Qu'essayez-vous de faire? Qu'est-ce que cela signifie pour une période de retard d'être vrai ou faux?
@Mark: Je jouais avec l'opérateur + dans ma dernière question / exemple qui m'a conduit à cela et j'ai utilisé la même classe. Le nom est un mannequin, j'apprends simplement comment fonctionne les OPS.
Vous n'avez pas déclaré des opérateurs pour & ou | - En examinant le lien de documentation que vous avez fourni indique que vous devez déclarer ces opérateurs, ils doivent renvoyer des objets myTimesPan et i> vous devez déclarer des opérateurs pour vrai et faux. La documentation explique également dans les cas où des opérateurs vrais et faux sont utilisés.
@James: Pour une raison quelconque, je pensais et comme si la gauche et le côté droit est à la fois vraie et ne voyait pas comment le logique et le concerne. Maintenant, je vois que cela fait un et entre les deux ops et les chèques s'il est vrai. Qui est bizarre pour moi. Cause 1 && 2 est illégale en C # et en C ++, il est vrai car il n'y a pas d'application logique et appliquée codépad.org/9icaqzq2 < / a>