C# - C Sharp: record

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Trong bài hướng dẫn này, bạn sẽ tìm hiểu về record trong C# cung cấp chức năng tích hợp để đóng gói dữ liệu.

record trong C# cung cấp chức năng tích hợp để đóng gói dữ liệu, giúp dễ dàng làm việc với dữ liệu bất biến và được định kiểu mạnh.

record là bất biến theo mặc định. Điều đó có nghĩa là bạn không thể thay đổi giá trị property của chúng sau khi được tạo.

record có hỗ trợ tích hợp để kiểm tra sự tương ứng dựa trên giá trị, có nghĩa là hai bản ghi có cùng giá trị là bằng nhau.

record cung cấp định dạng mặc định, có thể được tùy chỉnh bằng cách ghi đè phương thức ToString().

Định nghĩa record

Để định nghĩa record, bạn sử dụng từ khóa record với các property của record:

record RecordName(type property1, type property2, ..);

Ví dụ sau đây minh họa cách định nghĩa một record tên Person với ba property FirstNameLastNameAge:

public record Person(string FirstName, string LastName, int Age);

Tạo đối tượng record

Để tạo phiên bản mới của record, bạn có thể sử dụng từ khóa new theo sau là tên của record và cung cấp các giá trị cho các property của record. Chẳng hạn:

var person = new Person("John", "Doe", 22);

Trong ví dụ trên, ta đã tạo một record person mới với các giá trị "John" cho property FirstName"Doe" cho property LastName và 22 cho property Age

Tính bất biến

record là bất biến theo mặc định. Các nỗ lực sau đây để thay đổi record sẽ gây ra lỗi biên dịch:

var person = new Person("John", "Doe", 22);

person.Age = 25; // ERROR

Đột biến không phá hủy

Nếu bạn muốn sao chép record với một số sửa đổi, bạn có thể dùng biểu thức with. Đây được gọi là đột biến không phá hủy.

Biểu thức with sao chép một record hiện có, với các property đã xác định được thay đổi. Chẳng hạn:

var person = new Person("John", "Doe", 22);

var person2 = person with
{
    FirstName = "Jane",
    Age = 20
};

Console.WriteLine(person2);

Kết quả:

Person { FirstName = Jane, LastName = Doe, Age = 20 }

Trong ví dụ này, chúng ta sử dụng biểu thức with để sao chép record person và thay đổi property FirstName và Age bằng cú pháp khởi tạo đối tượng để chỉ định các giá trị cần thay đổi.zzz

Value-based equality checking

Records have built-in value-based equality checking, which means that two records with the same values are considered equal.

For example, if you create two records with the same values, they are equal:Person

using static System.Console;

var person1 = new Person("John", "Doe", 30);
var person2 = new Person("John", "Doe", 30);

WriteLine(person1 == person2); // True

public record Person(string FirstName, string LastName, int Age);Code language: C# (cs)

Output:

TrueCode language: PHP (php)

Deconstruction record properties

You can deconstruct a record into its constituent properties. For example:

using static System.Console;

var person = new Person("John", "Doe", 2);
var (FirstName, LastName, Age) = person;

WriteLine($"FirstName: {FirstName}, LastName: {LastName}, Age: {Age}");

public record Person(string FirstName, string LastName, int Age);Code language: C# (cs)

Output:

FirstName: John, LastName: Doe, Age: 22Code language: plaintext (plaintext)

Formatting

Records have built-in formatting capabilities that allow you to specify how they should be displayed as a string. Also, you can get a string representation of the record’s values by using the method:ToString()

using static System.Console;

var person = new Person("John", "Doe", 22);

WriteLine(person);

public record Person(string FirstName, string LastName, int Age);Code language: C# (cs)

Output:

Person { FirstName = John, LastName = Doe, Age = 22 }Code language: plaintext (plaintext)

By default, the method uses the record’s name followed by its property names and values. In case you want to customize the formatting, you can override the method like this:ToString()ToString()

using static System.Console;

var person = new Person("John", "Doe", 22);

WriteLine(person);
public record Person(string FirstName, string LastName, int Age)
{
    public override string ToString()
        => $"({FirstName},{LastName},{Age})";
}Code language: C# (cs)

Output:

(John,Doe,22)Code language: plaintext (plaintext)

Defining mutable records

It’s possible to define a mutable record. For example:

using static System.Console;

var person = new Person { 
    FirstName = "John", 
    LastName = "Doe", 
    Age = 22 
};

person.Age = 25; // OK
person.LastName = "Smith"; // OK

WriteLine(person );

public record Person
{
    public string FirstName { get; set;}
    public string LastName  { get; set;} 
    public int Age { get; set;}
}Code language: C# (cs)

Ra:

Person { FirstName = John, LastName = Smith, Age = 25 }Code language: plaintext (plaintext)

C# Ghi lại các ứng dụng

Trong thực tế, bạn có thể sử dụng bản ghi C# trong các trường hợp sau:

  • Mô hình phản hồi API: bạn có thể sử dụng bản ghi để biểu diễn các mô hình phản hồi trong API RESTful. Trong trường hợp này, bạn có thể xác định bản ghi với các thuộc tính tương ứng với dữ liệu được API trả về. Bản ghi giúp khử tuần tự phản hồi thành một đối tượng được gõ mạnh một cách dễ dàng và làm việc với dữ liệu đơn giản hơn.
  • Cài đặt cấu hình: bạn có thể sử dụng bản ghi để thể hiện cài đặt cấu hình cho ứng dụng. Trong trường hợp này, bạn xác định một bản ghi với các thuộc tính tương ứng với các thiết lập khác nhau của ứng dụng. Điều này cho phép bạn chuyển các cài đặt xung quanh giữa các phương thức và dịch vụ một cách dễ dàng trong khi thực thi tính bất biến của các cài đặt.
  • Mô hình tên miền: bạn có thể sử dụng bản ghi để biểu diễn mô hình miền trong một ứng dụng. Trong trường hợp này, bạn xác định một bản ghi với các thuộc tính tương ứng với dữ liệu đang được mô hình hóa. Bản ghi cho phép bạn dễ dàng làm việc với dữ liệu theo cách được gõ mạnh và bất biến. Ngoài ra, bạn có thể tận dụng khả năng kiểm tra và định dạng bình đẳng được tích hợp sẵn của các bản ghi.

Tóm tắt

  • Bản ghi C# là một loại tham chiếu cung cấp chức năng tích hợp để đóng gói dữ liệu.
  • Sử dụng bản ghi C# trong mô hình phản hồi API, cài đặt cấu hình và mô hình miền.
» Tiếp: Lớp (class) và đối tượng (object)
« Trước: yield
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!