[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на 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); } } |