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, когда вам важна личность объекта и его поведение.