• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Equals vs operator ==

Object Storage Arubacloud
0 głosów
308 wizyt
pytanie zadane 27 lipca 2017 w C# przez KlejnotNilu Użytkownik (750 p.)

Serwus!

Mam pytanie odnośnie przeciążania operatorów oraz metody Equals. Mam prostą klasę Complex, która odpowiada liczbie zespolonej.

Complex.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Przeciazanie_operatorow.Models
{
    class Complex
    {
        public double Re { get; private set; }
        public double Im { get; private set; }

        public Complex()
        {
            Re = Im = 0;
        }

        public Complex(double re, double im)
        {
            Re = re;
            Im = im;
        }

        public Complex(Complex c)
        {
            Re = c.Re;
            Im = c.Im;
        }

        public override string ToString()
        {
            return (Im >= 0) ? $"{Re} + {Im}i" : $"{Re} - {-Im}i";
        }
    }
}

Czy w przeciążeniu operatora == ( != też ) powinienem porównywać referencje obiektów czy wartości Re i Im? Co powinienem sprawdzać w metodzie Equals? 

1 odpowiedź

0 głosów
odpowiedź 28 lipca 2017 przez criss Mędrzec (172,590 p.)
https://stackoverflow.com/questions/814878/c-sharp-difference-between-and-equals

Czyli operator == sprawdza czy porównywane obiekty są dokładnie tymi samymi instancjami, a metoda Equals powinna porównywać na zasadzie porównywania zawartości (np. tak jak w przykładzie na SO - porównywanie stringów metodą Equals oznacza porównywanie przetrzymywanych łańcuchów).
komentarz 28 lipca 2017 przez KlejnotNilu Użytkownik (750 p.)

Jeżeli chodzi o stringi to czy obie metody nie porównują wartości ( łańcuchy znaków )?

W końcu operator przypisania dla zmiennej string zwraca nowy obiekt, a nie przypisuje referencję.

string text = "Text";
string newText = text; // tworzony jest nowy obiekt typu string. 
//Gdy zmienimy zmienna newText nie zmienia się zmienna text

 

komentarz 28 lipca 2017 przez criss Mędrzec (172,590 p.)

W końcu operator przypisania dla zmiennej string zwraca nowy obiekt, a nie przypisuje referencję.

Nie rozumiem związku. Przecież mówimy o operatorze porównania. 

komentarz 28 lipca 2017 przez KlejnotNilu Użytkownik (750 p.)

porównywanie stringów metodą Equals oznacza porównywanie przetrzymywanych łańcuchów).

Chodzi mi o to, że w klasie string operator == również porównuje łańcuchy znaków, nie referencje. Więc od czego zależy jak powinno się przeciążać operatory? Bo napisałeś, że operator == porównuje referencje, Equals wartości. W klasie string mamy jednak inaczej.

komentarz 29 lipca 2017 przez criss Mędrzec (172,590 p.)

Hm, to chyba faktycznie jest jakiś wyjątek. Nie pisałem zbyt dużo w C# - napisałem to, co wyczytałem na SO. Anyway:

When == is used on an expression of type object, it'll resolve to System.Object.ReferenceEquals .

 Niestety nie doczytałem się dlaczego w przypadku stringa to wygląda tak jak wygląda.

Podobne pytania

0 głosów
3 odpowiedzi 223 wizyt
pytanie zadane 30 września 2017 w C# przez newbie2 Nowicjusz (190 p.)
0 głosów
2 odpowiedzi 184 wizyt
0 głosów
1 odpowiedź 475 wizyt
pytanie zadane 18 marca 2018 w C i C++ przez Erichu Nowicjusz (230 p.)

92,568 zapytań

141,422 odpowiedzi

319,634 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...