Sobes.tech
Junior — Middle

Kuidas toimub viidetüüpi objektide võrdlus, kui isiklikud võrdlusmeetodid pole rakendatud?

sobes.tech AI

Vastus AI-lt

Kui C#-s pole rakendatud oma võrdlusmeetodeid viidetüüpide jaoks (näiteks, kui Equals ja GetHashCode meetodid pole üle kirjutatud), toimub objektide võrdlemine vaikimisi viite alusel. See tähendab, et kaks objekti loetakse võrdseteks ainult siis, kui nad viitavad samale eksemplarile mälus.

Näide:

class Person {}

var p1 = new Person();
var p2 = new Person();

bool areEqual = p1.Equals(p2); // false, kuna need on erinevad objektid
bool areSame = Object.ReferenceEquals(p1, p2); // false

var p3 = p1;
bool areSame2 = Object.ReferenceEquals(p1, p3); // true

Seega, kui pole üle kirjutatud, kontrollib võrdlus, kas muutujad viitavad samale objektile.