Quelqu'un a-t-il un exemple très simple de la façon de surcharger l'opérateur d'affectation composé en C#?Manière simple de surcharger l'opérateur d'assignation composée en C#?
Répondre
Vous ne pouvez pas surcharger explicitement les opérateurs d'affectation composés. Vous pouvez cependant surcharger l'opérateur principal et le compilateur l'étend.
x += 1
est purement sucre syntaxique pour x = x + 1
et ce dernier est ce qu'il sera traduit en. Si vous surchargez l'opérateur +
, il sera appelé.
MSDN Operator Overloading Tutorial
public static Complex operator +(Complex c1, Complex c2)
{
return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
}
Vous ne pouvez pas surcharger ces opérateurs en C#.
Le message de Stephan indique que vous pouvez. Bien sûr, vous ne pouvez pas le remplacer orthogonalement par l'opérateur +, mais bon, c'est techniquement possible. – dss539
@ dss539 - Indirectement, bien sûr. Je répondais à sa question. –
@ dss539 - C'est "techniquement possible"? Si quelque chose, "techniquement possible" est exactement ce qu'il n'est pas. –
Selon la spécification C#, + = est pas dans la liste des opérateurs surchargeables. Je suppose que c'est parce que c'est un opérateur d'assignation, qui ne peut pas être surchargé. Cependant, contrairement à ce qui est indiqué dans d'autres réponses ici, 'x + = 1' est et nonle même que 'x = x + 1'. La spécification C#, « 7.17.2 affectation composée » est très clair à ce sujet:
... the operation is evaluated as x = x op y, except that x is evaluated only once
La partie importante est la dernière partie: x est évalué qu'une seule fois. Ainsi, dans des situations comme celle-ci:
A[B()] = A[B()] + 1;
il peut (et fait) faire une différence, comment formuler votre déclaration. Mais je suppose, dans la plupart des situations, la différence sera négligeable. (Même si je suis juste tombé sur un, où il ne l'est pas.)
La réponse à la question est donc: on ne peut pas surcharger l'opérateur + =. Pour les situations où l'intention est réalisable via de simples opérateurs binaires, on peut surcharger l'opérateur + et archiver un objectif similaire.
Voici un bon article sur le sujet des opérateurs de surcharge en C#: http://www.informit.com/articles/article.aspx?p=101373&seqNum=15 – vitorbal
Je sais qu'il peut être surchargé de cette façon, je veux juste un exemple de code très simple. N'importe qui? – chris12892
Merci, c'est exactement ce dont j'avais besoin – chris12892