Class vs Record в .NET — в чём разница
Давайте коротко разберём один из частых вопросов у C#-разработчиков:
➡️Чем отличается class от record и когда стоит использовать каждый из них?
class — используется для работы со ссылочными типами, которые обычно используются для описания сущностей с состоянием и поведением.
Главная особенность — сравнение по ссылке. То есть два объекта считаются идентичными, только если это один и тот же экземпляр.
var foo = new Foo("Test"); var bar = new Foo("Test me"); Console.WriteLine(foo == bar); // false
📌 Обычно классы выбирают для:
- моделей с изменяемыми свойствами;
- бизнес-логики, сервисов, контроллеров;
- когда важна идентичность объекта, а не просто его данные.
record — неизменяемые модели данных
record появился в C# 9.0 и предназначен для value-like поведения. Он тоже для ссылочных типов, но сравнение выполняется по значению.
var foo = new Foo("Test"); var bar = new Foo("Test me"); Console.WriteLine(foo == bar); // true
Кроме этого, record автоматически:
- имеет под капотом Equals, GetHashCode, ToString;
- можно создать измененную копию через with:
var updated = foo with { Caption = "Updated test message" };
- отлично подходит для DTO, моделей в CQRS, request/response объектов и конфигураций.
‼️Как итог: Используйте record, когда вам важны данные, и class, когда вам важна личность объекта и его поведение.