¿Alguien tiene un ejemplo muy simple de cómo sobrecargar el operador de asignación compuesta en C#?¿Forma sencilla de sobrecargar el operador de asignación compuesta en C#?
Respuesta
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);
}
No puede sobrecargar esos operadores en C#.
La publicación de Stephan indica que puedes. Por supuesto, no puede anularlo ortogonalmente desde el operador +, pero bueno, es técnicamente posible. – dss539
@ dss539 - Indirectamente, seguro. Estaba respondiendo su pregunta. –
@ dss539 - ¿Es "técnicamente posible"? En todo caso, "técnicamente posible" es exactamente lo que no es. –
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.
- 1. ¿Cómo sobrecargar el operador de indirección? (C++)
- 2. ¿Cómo sobrecargar el operador [] en C#
- 3. C++ sobrecarga operador de asignación
- 4. Operador de asignación de sobrecarga en C++
- 5. ¿Por qué sobrecargar el operador de asignación de copia para una clase singleton en C++?
- 6. ¿Hay alguna solución para sobrecargar el operador de asignación en C#?
- 7. operador de asignación sobrecarga en C#
- 8. Cómo sobrecargar el operador -> *?
- 9. ¿Es posible sobrecargar la asignación de Python?
- 10. ¿Por qué no puedes sobrecargar el '.' operador en C++?
- 11. ¿Cómo sobrecargar el operador menos unario en C++?
- 12. ¿Cómo podría sobrecargar sensiblemente el operador de colocación nuevo?
- 13. C++ sencilla: ¿Cómo sobrecargar el operador de multiplicación, de modo que flotan * * myClass y myClass flotador funciona
- 14. operador de asignación sobrecarga en C++
- 15. ¿Cuál es la forma correcta de sobrecargar el operador == para una jerarquía de clases?
- 16. cómo sobrecargar Postfix y operador de prefijo en C#
- 17. ¿Debe ser el parámetro del operador de asignación una referencia?
- 18. ¿Hay alguna forma de sobrecargar el operador de vinculación de expresiones regulares `= ~` en Perl?
- 19. ¿Por qué no se puede usar una función no miembro para sobrecargar el operador de asignación?
- 20. C#: Shift comportamiento operador de asignación izquierda
- 21. C++: operador de asignación virtual puro
- 22. imitación de C# omitiendo el operador de asignación (=)
- 23. ¿Hay algún truco para "sobrecargar el operador de punto"?
- 24. Operador de asignación: autoasignación
- 25. ¿Hay alguna forma de sobrecargar + = en python?
- 26. Plantilla operador de asignación sobrecarga misterio
- 27. Operador de asignación de suma sobrecargada en C++ para dos/más de dos objetos?
- 28. operador de asignación (=) en el argumento del método de definición
- 29. Operador de asignación de C++: ¿compilador generado o personalizado?
- 30. Cuándo utilizar el operador de asignación sobrecargado?
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
Sé que puede estar sobrecargado de esa manera, solo quiero un ejemplo de código muy simple. ¿Nadie? – chris12892
Gracias, eso es exactamente lo que necesitaba – chris12892