Trong C#, struct (cấu trúc) là kiểu dữ liệu giá trị (value type). Nó giúp một biến đơn lẻ giữ dữ liệu liên quan của nhiều kiểu dữ liệu khác nhau. Từ khóa struct dùng để tạo cấu trúc.
Cú pháp
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
Ví dụ hoàn chỉnh
using System;
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
}
public class TestStructure
{
public static void Main(string[] args)
{
Books Book1; // Khai báo Book1 kiểu Book
Books Book2; // Khai báo Book2 kiểu Book
// Thông tin sách 1
Book1.title = "C Programming";
Book1.author = "Nuha Ali";
Book1.subject = "C Programming Tutorial";
Book1.book_id = 6495407;
// Thông tin sách 2
Book2.title = "Telecom Billing";
Book2.author = "Zara Ali";
Book2.subject = "Telecom Billing Tutorial";
Book2.book_id = 6495700;
// In thông tin
Console.WriteLine("Sách 1 - Tiêu đề: {0}", Book1.title);
Console.WriteLine("Sách 1 - Tác giả: {0}", Book1.author);
Console.WriteLine("Sách 1 - Chủ đề: {0}", Book1.subject);
Console.WriteLine("Sách 1 - ID: {0}", Book1.book_id);
Console.WriteLine();
Console.WriteLine("Sách 2 - Tiêu đề: {0}", Book2.title);
Console.WriteLine("Sách 2 - Tác giả: {0}", Book2.author);
Console.WriteLine("Sách 2 - Chủ đề: {0}", Book2.subject);
Console.WriteLine("Sách 2 - ID: {0}", Book2.book_id);
Console.ReadKey();
}
}
Kết quả
Sách 1 - Tiêu đề: C Programming Sách 1 - Tác giả: Nuha Ali Sách 1 - Chủ đề: C Programming Tutorial Sách 1 - ID: 6495407 Sách 2 - Tiêu đề: Telecom Billing Sách 2 - Tác giả: Zara Ali Sách 2 - Chủ đề: Telecom Billing Tutorial Sách 2 - ID: 6495700
Struct vs Class
| Đặc điểm | struct | class |
|---|---|---|
| Kiểu | Value type | Reference type |
| Lưu trữ | Stack (thường) | Heap |
| Kế thừa | Không (chỉ implement interface) | Có |
| Constructor | Không có parameterless constructor | Có |
| Null | Không thể null (trừ nullable) | Có thể null |
| Hiệu suất | Nhanh cho object nhỏ | Phù hợp object lớn |
Khi dùng struct: Kiểu dữ liệu nhỏ, bất biến (immutable), hành vi giá trị, không cần kế thừa (Point, Rectangle, DateTime, Guid...).