Czy ktoś ma bardzo prosty przykład, jak przeciążyć złożenia operator przypisania w C#?Prosty sposób na przeciążenie złożonego operatora przypisania w C#?
Odpowiedz
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);
}
Nie można przeciążać tych operatorów w języku C#.
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
@ dss539 - Pośrednio, oczywiście. Właśnie odpowiadałem na jego pytanie. –
@ dss539 - To jest "technicznie możliwe"? Jeśli cokolwiek, "technicznie możliwe" jest dokładnie tym, czym nie jest. –
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.
- 1. Przeciążenie operatora przypisania w C#
- 2. Boolean i String Przeciążenie operatora przypisania (C++)
- 3. Przeciążenie operatora C++ [] []
- 4. C# naśladować zastąpienie operatora przypisania (=)
- 5. Przeciążenie operatora w Clojure
- 6. Przeciążenie operatora w Delphi
- 7. Przeciążenie globalnego operatora typograficznego?
- 8. Kontrawariancja i przeciążenie operatora
- 9. Przeciążenie operatora strumienia
- 10. Przeciążenie operatora powoduje przepełnienie stosu
- 11. jak przeciążenie Postfix oraz operatora przedrostka w C#
- 12. Czy maszynopis ma przeciążenie operatora?
- 13. R Jednoargumentowe przeciążenie operatora: ryzyko?
- 14. Przeciążenie operatora i suma Linq w języku C#
- 15. jaki jest typ zwrotu operatora przypisania?
- 16. Przeciążanie operatora w C++
- 17. Przeciążenie operatora przestaje działać w pakiecie R.
- 18. Kiedy powinienem zdefiniować swojego własnego operatora i operatora przypisania
- 19. Usuwanie std :: vector wymaga operatora przypisania. Czemu?
- 20. C++ lotne i przeciążenie operatora dla aplikacji CUDA
- 21. Deklaracja odniesienia do obiektu i operatora przypisania
- 22. Przeciążenie C++ [] z transformacją
- 23. Przeciążanie statycznego operatora C++
- 24. Czy istnieje sposób na przeciążenie + = w python?
- 25. Przeciążenie operatora << dla tablic
- 26. Przeciążenie operatora << i rekurencji
- 27. Konstruktor wywołania kopiowania z funkcji operatora przypisania
- 28. operator() przeciążenie z szablonu C++
- 29. Pytanie operatora strumienia C++
- 30. Czy możliwe jest przeciążenie operatorów w C?
tutaj jest dobry artykuł na temat przeciążania operatorów w C#: http://www.informit.com/articles/article.aspx?p=101373&seqNum=15 – vitorbal
Wiem, że może być przeciążony w ten sposób, po prostu chcę bardzo prosty przykład kodu. Ktoś? – chris12892
Dzięki, właśnie tego potrzebowałem – chris12892