Комментарии (2)
🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Сравнение классов в C#
В C# сравнение классов можно выполнять несколькими способами, каждый из которых имеет свои особенности и сценарии применения. Основные подходы делятся на сравнение ссылок и сравнение значений.
1. Сравнение ссылок (Reference Equality)
По умолчанию операторы == и !=, а также метод object.ReferenceEquals() сравнивают ссылки на объекты, а не их содержимое. Это означает, что они проверяют, указывают ли две переменные на один и тот же экземпляр объекта в управляемой куче.
class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
}
// Пример сравнения ссылок
Person person1 = new Person("Alice");
Person person2 = new Person("Alice");
Person person3 = person1;
Console.WriteLine(person1 == person2); // False - разные объекты
Console.WriteLine(ReferenceEquals(person1, person2)); // False
Console.WriteLine(person1 == person3); // True - одна ссылка
Console.WriteLine(ReferenceEquals(person1, person3)); // True
2. Сравнение значений (Value Equality)
Для сравнения содержимого объектов необходимо реализовать специальные механизмы:
Метод Equals()
Базовый класс object предоставляет виртуальный метод Equals(), который можно переопределить для сравнения значений:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
return false;
Person other = (Person)obj;
return Name == other.Name && Age == other.Age;
}
public override int GetHashCode()
{
return HashCode.Combine(Name, Age);
}
}
// Использование
Person p1 = new Person("