Sobes.tech
Junior — Middle

W jakich przypadkach przeprowadza się porównanie typów danych referencyjnych?

sobes.tech AI

Odpowiedź od AI

W C# porównanie typów referencyjnych odbywa się w następujących przypadkach:

  • Porównanie referencji (ReferenceEquals) — sprawdza, czy dwie zmienne wskazują na ten sam obiekt w pamięci.

  • Przeciążenie metody Equals() — służy do porównania zawartości obiektów, a nie ich adresów.

  • Operatory == i != — domyślnie dla typów referencyjnych porównują referencje, ale mogą być przeciążone do porównania zawartości.

Przykład:

class Person {
    public string Name;
    public override bool Equals(object obj) {
        if (obj is Person other) {
            return this.Name == other.Name;
        }
        return false;
    }
    public override int GetHashCode() => Name.GetHashCode();
}

var p1 = new Person { Name = "Alice" };
var p2 = new Person { Name = "Alice" };

bool areSameReference = Object.ReferenceEquals(p1, p2); // false
bool areEqual = p1.Equals(p2); // true

W ten sposób porównanie typów referencyjnych odbywa się albo w celu sprawdzenia, czy zmienne wskazują na ten sam obiekt, albo w celu porównania zawartości obiektów, jeśli metoda Equals została nadpisana.