2010-05-19 11 views

Odpowiedz

11

Nie można jawnie przeciążać operatorów przypisania złożonych. Można jednak przeciążyć głównego operatora, a kompilator je rozszerza.

x += 1 jest czysto syntaktycznym cukrem dla x = x + 1, a drugi jest tym, do czego zostanie przetłumaczony. W przypadku przeciążenia operatora + zostanie on wywołany.

MSDN Operator Overloading Tutorial

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

tutaj jest dobry artykuł na temat przeciążania operatorów w C#: http://www.informit.com/articles/article.aspx?p=101373&seqNum=15 – vitorbal

+0

Wiem, że może być przeciążony w ten sposób, po prostu chcę bardzo prosty przykład kodu. Ktoś? – chris12892

+0

Dzięki, właśnie tego potrzebowałem – chris12892

2

Nie można przeciążać tych operatorów w języku C#.

+2

Stanowisko Stephana wskazuje, że możesz. Oczywiście nie można go przesłonić ortogonalnie od operatora +, ale hej, jest to technicznie możliwe. – dss539

+0

@ dss539 - Pośrednio, oczywiście. Właśnie odpowiadałem na jego pytanie. –

+0

@ dss539 - To jest "technicznie możliwe"? Jeśli cokolwiek, "technicznie możliwe" jest dokładnie tym, czym nie jest. –

4

Według specyfikacji C# + = nie ma na liście operatorów przeciążania. Zakładam, że dzieje się tak, ponieważ jest to również operator przypisania, który nie może być przeciążony. Jednak w przeciwieństwie do innych odpowiedzi tutaj, "x + = 1" jest nietym samym jako "x = x + 1". Specyfikacja C# „przypisanie 7.17.2 związek” bardzo jasno, że:

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

Ważną częścią jest ostatnią częścią X jest analizowany tylko raz. W takich sytuacjach:

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

może (i robi) różnicę, jak sformułować swoje oświadczenie. Ale zakładam, że w większości sytuacji różnica będzie znikoma. (Nawet jeśli natknąłem się na jeden, gdzie go nie ma).

Odpowiedź na pytanie brzmi: nie można przesłonić operatora + =. W sytuacjach, w których zamiar można zrealizować za pomocą prostych operatorów binarnych, można zastąpić operatora + i archiwizować podobny cel.

Powiązane problemy