Sobes.tech
Back to questions
Junior — Middle
61

Чем отличается тип данных Record от Struct в контексте программирования?

Answer from AI

sobes.tech AI

В C# record и struct — это разные типы данных с разными назначениями и поведением.

  • Record — это ссылочный тип (reference type), предназначенный для создания неизменяемых (immutable) объектов с поддержкой семантики значения. Records автоматически реализуют методы Equals(), GetHashCode() и ToString(), основываясь на значениях свойств, что удобно для сравнения и копирования объектов.

  • Struct — это значимый тип (value type), который хранится в стеке и копируется по значению. Struct обычно используется для небольших, легковесных объектов, где важна производительность и минимизация аллокаций в куче.

Основные отличия:

Характеристика Record (class) Struct
Тип Ссылочный (reference type) Значимый (value type)
Мутабельность Обычно immutable Может быть mutable
Хранение В куче В стеке или inline
Сравнение По значению (значения свойств) По значению (все поля)
Использование Для сложных объектов с логикой Для легковесных данных

Пример записи record:

public record Person(string FirstName, string LastName);

var p1 = new Person("Иван", "Иванов");
var p2 = new Person("Иван", "Иванов");
Console.WriteLine(p1 == p2); // True, сравнение по значениям

Пример struct:

public struct Point
{
    public int X { get; set; }
    public int Y { get; set; }
}

var point1 = new Point { X = 1, Y = 2 };
var point2 = point1; // копирование по значению
point2.X = 3;
Console.WriteLine(point1.X); // 1