رکوردها (Records) در C#

Record یکی از ویژگی‌های مدرن C# است که برای ساخت داده‌های Immutable و سبک‌تر استفاده می‌شود.

Record چیست؟

Record یک نوع Reference Type است که بیشتر برای نگهداری داده استفاده می‌شود و به صورت پیش‌فرض قابلیت‌های مقایسه و کپی ساده را فراهم می‌کند.

تعریف ساده Record


public record User(string Name, int Age);

استفاده از Record


var user1 = new User("Ali", 25);
var user2 = new User("Ali", 25);

Console.WriteLine(user1 == user2); // True

تفاوت Record با Class

در کلاس‌ها مقایسه بر اساس reference انجام می‌شود، اما در record مقایسه بر اساس مقدار (value-based) است.


public class UserClass
{
    public string Name { get; set; }
}

public record UserRecord(string Name);

var c1 = new UserClass { Name = "Ali" };
var c2 = new UserClass { Name = "Ali" };

Console.WriteLine(c1 == c2); // False

var r1 = new UserRecord("Ali");
var r2 = new UserRecord("Ali");

Console.WriteLine(r1 == r2); // True

Immutability در Record

Recordها به صورت پیش‌فرض Immutable هستند (مقدارشان تغییر نمی‌کند).


public record User(string Name, int Age);

var user = new User("Ali", 25);

// ایجاد نسخه جدید با تغییر مقدار
var updatedUser = user with { Age = 26 };

Record با ویژگی‌های پیشرفته


public record User
{
    public string Name { get; init; }
    public int Age { get; init; }
}

چه زمانی از Record استفاده کنیم؟

  • برای DTO ها (Data Transfer Objects)
  • برای مدل‌های فقط خواندنی
  • برای انتقال داده بین لایه‌ها

مثال واقعی در پروژه


public record CreateUserRequest(string Name, int Age);

جمع‌بندی

Recordها یک ابزار مدرن در C# هستند که برای مدل‌سازی داده‌های ساده، immutable و قابل مقایسه بسیار کاربردی هستند.