[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
Зазвичай (якщо не йдеться про рядки) Equals порівнює значення, а == порівнює об’єктні посилання. Якщо два об’єкти, що порівнюються, посилаються на один і той самий екземпляр об’єкта, то обидва повернуть true, але якщо один із них має однаковий вміст і отриманий з іншого джерела (є окремим екземпляром із тими самими даними), то тільки Equals поверне true (якщо він перевизначений).
Розглянемо приклад для звичайних рядків:
1 2 3 4 5 6 7 8 |
static void Main() { string str = "Hello"; string str2 = "Hello"; bool a = str.Equals(str2);//true bool b = str == str2;//true } |
string – це особливий випадок, оскільки він перевизначає оператор ==, тож під час роботи тільки з рядковими посиланнями (а не з об’єктними) порівнюються тільки значення, навіть якщо вони є окремими екземплярами.
При роботі з об’єктами складових типів, метод Equals можна перевизначити для зазначення потрібної логіки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class Programm { static void Main() { Person person = new Person { Name = "Alex" }; Person person2 = new Person { Name = "Alex" }; Person person3 = person; bool a = person.Equals(person2);//true bool b = person == person2;//false bool c = person == person3;//true } } class Person { public string Name { get; set; } public override bool Equals(object? obj) { if (obj is not Person p) return false; return p.Name.Equals(Name); } } |