2011-08-16 18 views
6

Powiel możliwe:
Why must we define both == and != in C#?Przeciążenie + =, +, ==, i = operatorzy

Dlaczego przeciążenie + = możliwe tylko przez przeciążenie +, ale == i! = są osobno przeciążone?
Wygląda na to, że powinien zostać odwrócony.
+ = przeciążanie jest prawie zawsze możliwe, aby pisać bardziej efektywnie, ponieważ nie jest konieczne przydzielanie pamięci dla nowego obiektu. Ale nie mogę wymyślić przykładu, w którym operatory == i! = Powinny być inne w czymś innym niż odwracanie wyniku Equals().

Odpowiedz

7

Podobnym pytaniem było asked before.

Największym powodem jest to, że podczas przeciążania operatorów == i != nie trzeba zwracać wartości boolowskiej. Jeśli nie zwracasz wartości boolowskiej, nie możesz po prostu odwrócić operatora bezpłatnego. Są inne możliwe powody, dla których są osobno przeciążone, możesz wyświetlić odpowiedzi na to pytanie z innych powodów.

Istnieje ważny powód, dla którego nie można przeładować +=, a zatem jest to wykonywane domyślnie za pośrednictwem operatora +. Mam do czynienia z faktem, że nie można przesłonić operatora przypisania w C#, jest to część standardu językowego. += jest inkrementacją i przyporządkowaniem, z której nie można przeciążać w języku C#.

+4

+1 Wyobraź sobie szaleństwo, jeśli możesz przeciążyć '+' i '+ =' oddzielnie ... –

+0

Jeśli C# i .net nie zrobiły złych rzeczy o zmiennych strukturach (zmienne struktury nie są złe - niektóre rzeczy .net jest z nimi), lub jeśli pozwoliły klasom ograniczać złą rozwiązłość dzielenia się odniesieniami do ich obiektów, byłoby użyteczne mieć oddzielne operatory + = i +, ponieważ użycie operatora "+" oznaczałoby zrobienie kopiować i pozostawiać oryginał nietknięty, natomiast "+ =" oznacza, że ​​oryginał można zmodyfikować. Zwróć uwagę, że wydarzenia obsługują "+ =" i "- =", ale nie obsługują "+" i "-". – supercat