← Назад к вопросам

Как сравниваются классы?

2.3 Middle🔥 192 комментариев
#Основы C# и .NET

Комментарии (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("
Как сравниваются классы? | PrepBro