2010-05-19 23 views

Respuesta

11

No puede sobrecargar explícitamente los operadores de asignación compuesta. Sin embargo, puede sobrecargar al operador principal y el compilador lo expande.

x += 1 es azúcar puramente sintáctico para x = x + 1 y esto último es lo que se traducirá. Si sobrecarga el operador + se llamará.

MSDN Operator Overloading Tutorial

public static Complex operator +(Complex c1, Complex c2) 
{ 
    return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary); 
} 
+0

aquí hay un buen artículo sobre el tema de la sobrecarga de operadores en C#: http://www.informit.com/articles/article.aspx?p=101373&seqNum=15 – vitorbal

+0

Sé que puede estar sobrecargado de esa manera, solo quiero un ejemplo de código muy simple. ¿Nadie? – chris12892

+0

Gracias, eso es exactamente lo que necesitaba – chris12892

2

No puede sobrecargar esos operadores en C#.

+2

La publicación de Stephan indica que puedes. Por supuesto, no puede anularlo ortogonalmente desde el operador +, pero bueno, es técnicamente posible. – dss539

+0

@ dss539 - Indirectamente, seguro. Estaba respondiendo su pregunta. –

+0

@ dss539 - ¿Es "técnicamente posible"? En todo caso, "técnicamente posible" es exactamente lo que no es. –

4

Según la especificación C#, + = no está en la lista de operadores sobrecargable. Supongo que esto se debe a que también es un operador de asignación, que no pueden sobrecargarse. Sin embargo, a diferencia de lo indicado en otras respuestas aquí, 'x + = 1' es noel mismo como 'x = x + 1'. El C# memoria descriptiva, "asignación 7.17.2 Compuesto" es muy claro que:

... the operation is evaluated as x = x op y, except that x is evaluated only once 

La parte importante es la última parte: x se evalúa sólo una vez. Entonces en situaciones como esta:

A[B()] = A[B()] + 1; 

puede (y hace) hacer una diferencia, cómo formular su declaración. Pero supongo que, en la mayoría de las situaciones, la diferencia será insignificante. (Incluso si me encontré con uno, donde no está).

La respuesta a la pregunta por lo tanto es: no se puede anular el operador + =. Para situaciones donde la intención es realizable a través de operadores binarios simples, uno puede anular el operador + y obtener un objetivo similar.

Cuestiones relacionadas