Sobes.tech
Junior — Middle

Kokiais atvejais atliekamas nuorodų duomenų tipų palyginimas?

sobes.tech AI

Atsakymas iš AI

C# kalboje nuorodų tipų palyginimas vyksta šiais atvejais:

  • ReferenceEquals palyginimas — patikrina, ar dvi kintamosios nurodo tą patį objektą atmintyje.

  • Equals() metodo perrašymas — skirtas palyginti objektų turinį, o ne jų adresus.

  • == ir != operatoriai — pagal numatytuosius nustatymus, nuorodų tipų atveju, jie palygina nuorodas, tačiau gali būti perrašyti turiniui palyginti.

Pavyzdys:

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

Taigi, nuorodų tipų palyginimas atliekamas arba norint patikrinti, ar kintamieji nurodo tą patį objektą, arba norint palyginti objektų turinį, jei metodas Equals yra perrašytas.