Sobes.tech
Junior — Middle

Σε ποιες περιπτώσεις πραγματοποιείται η σύγκριση τύπων δεδομένων αναφοράς;

sobes.tech AI

Απάντηση από AI

Στη C#, η σύγκριση τύπων αναφοράς πραγματοποιείται στις ακόλουθες περιπτώσεις:

  • Σύγκριση Αναφορών (ReferenceEquals) — ελέγχει αν δύο μεταβλητές αναφέρονται στο ίδιο αντικείμενο στη μνήμη.

  • Υπερφόρτωση της Equals() — για σύγκριση του περιεχομένου των αντικειμένων, όχι των διευθύνσεών τους.

  • Τελεστές == και != — κατά προεπιλογή, για τύπους αναφοράς, συγκρίνουν τις αναφορές, αλλά μπορούν να υπερφορτωθούν για σύγκριση περιεχομένου.

Παράδειγμα:

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

Επομένως, η σύγκριση τύπων αναφοράς πραγματοποιείται είτε για να ελεγχθεί αν οι μεταβλητές αναφέρονται στο ίδιο αντικείμενο, είτε για να συγκριθεί το περιεχόμενο των αντικειμένων, εάν η μέθοδος Equals έχει υπερφορτωθεί.