2010-05-19 12 views

Répondre

11

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); 
} 
+0

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

+0

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

+0

Merci, c'est exactement ce dont j'avais besoin – chris12892

2

Vous ne pouvez pas surcharger ces opérateurs en C#.

+2

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

+0

@ dss539 - Indirectement, bien sûr. Je répondais à sa question. –

+0

@ dss539 - C'est "techniquement possible"? Si quelque chose, "techniquement possible" est exactement ce qu'il n'est pas. –

4

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.