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.