Struct và Enum trong C#

Struct trong C#

Trong C #, cấu trúc (struct) là kiểu dữ liệu kiểu giá trị. Nó giúp bạn tạo một biến duy nhất lưu trữ dữ liệu liên quan đến các loại dữ liệu khác nhau. Từ khóa struct được sử dụng để tạo ra một cấu trúc.

Struct được sử dụng để đại diện cho một bản ghi. Giả sử bạn muốn theo dõi sách trong thư viện. Bạn có thể muốn theo dõi các thuộc tính sau:

  • Tiêu đề
  • Tác giả
  • Thể loại
  • Mã sách

Định nghĩa cấu trúc

Để định nghĩa cấu trúc, bạn phải sử dụng câu lệnh struct. Câu lệnh struct xác định một kiểu dữ liệu mới, có nhiều hơn một thành viên cho chương trình của bạn.

Ví dụ: đây là cách bạn có thể khai báo cấu trúc Books:

struct Books 
{
   public string title;
   public string author;
   public string category;
   public int book_id;
};

Chương trình sau đây cho thấy việc sử dụng cấu trúc:

using System;

struct Books 
{
   public string Title;
   public string Author;
   public string Category;
   public int BookId;
};  

public class testStructure 
{
   public static void Main(string[] args) 
   {
      Books book;
      
      book.Title = "C# Programming";
      book.Author = "Trung Nguyen"; 
      book.Category = "Programming";
      book.BookId = 6495407;

      Console.WriteLine("Book title : {0}", book.Title);
      Console.WriteLine("Book author : {0}", book.Author);
      Console.WriteLine("Book category : {0}", book.Category);
      Console.WriteLine("Book id : {0}", book.BookId);

      Console.ReadKey();
   }
}

Kết quả khi chạy chương trình:

Book title : C# Programming
Book author : Trung Nguyen
Book category : Programming
Book id : 6495407

Các tính năng của cấu trúc trong C#

Bạn đã sử dụng một cấu trúc đơn giản có tên Books ở trên. Các cấu trúc trong C# khá khác so với cấu trúc trong C hoặc C ++ truyền thống. Các cấu trúc C# có các tính năng sau:

  • Các cấu trúc có thể có các phương thức, trường, chỉ mục, thuộc tính, phương thức toán tử và sự kiện.
  • Các cấu trúc có thể định nghĩa các phương thức khởi tạo, nhưng không có phương thức hủy. Tuy nhiên, bạn không thể định nghĩa phương thức khởi tạo mặc định cho cấu trúc. Phương thức khởi tạo mặc định được tự động định nghĩa và không thể thay đổi.
  • Không giống như lớp, cấu trúc không thể kế thừa cấu trúc hoặc lớp khác.
  • Cấu trúc không thể được sử dụng làm cơ sở cho cấu trúc hoặc lớp khác.
  • Một cấu trúc có thể triển khai một hoặc nhiều interface.
  • Các thành viên cấu trúc không thể chỉ định là abstract, virtual hoặc protected.
  • Khi bạn tạo một đối tượng struct bằng toán tử new, phương thức khởi tạo thích hợp được gọi. Không giống như lớp, cấu trúc có thể được khởi tạo mà không cần sử dụng toán tử new.
  • Nếu toán tử new không được sử dụng, các trường vẫn chưa được gán dữ liệu và đối tượng không thể sử dụng cho đến khi tất cả các trường được khởi tạo.

Lớp so với cấu trúc

Lớp và cấu trúc có những khác biệt cơ bản sau:

  • Lớp là kiểu tham chiếu và cấu trúc là kiểu giá trị.
  • Cấu trúc không hỗ trợ kế thừa còn lớp thì có.
  • Cấu trúc không có phương thức khởi tạo mặc định còn lớp thì có.

Từ các tính năng đã nêu ở trên, chúng ta hãy viết lại ví dụ trước như sau:

using System;

struct Books 
{
   private string Title;
   private string Author;
   private string Category;
   private int BookId;
   
   public Books(string title, string author, string category, int bookId) 
   {
      Title = title;
      Author = author;
      Category = category;
      BookId = bookId;
   }
   
   public void Display() 
   {
      Console.WriteLine("Title : {0}", Title);
      Console.WriteLine("Author : {0}", Author);
      Console.WriteLine("Category : {0}", Category);
      Console.WriteLine("Book ID : {0}", BookId);
   }
};  

public class testStructure 
{
   public static void Main(string[] args) 
   {
      Books book = new Books("C# Programming", "Trung Nguyen", "Programming",6495407);

      book.Display();

      Console.ReadKey();
   }
}

Kết quả khi chạy chương trình:

Title : C# Programming
Author : Trung Nguyen
Category : Programming
Book ID : 6495407

Enum trong C#

Một Enum (bảng liệt kê) là một tập hợp các hằng số nguyên được đặt tên. Một kiểu enum được khai báo bằng cách sử dụng từ khóa enum trong C#.

Các kiểu liệt kê trong C# là kiểu dữ liệu giá trị. Nói cách khác, kiểu liệt kê chứa các giá trị của nó và không thể kế thừa hoặc không thể truyền thừa kế.

Khai báo biến enum trong C#

Cú pháp chung để khai báo một Enum trong C# là:

enum <enum_name> 
{
   enumeration list 
};

Giải thích ý nghĩa:

  • enum_name: chỉ định tên enum.
  • enumeration list: là danh sách các định danh được phân biệt nhau bởi dấu phẩy.

Mỗi ký hiệu trong enumeration list đại diện cho một giá trị nguyên, ký hiệu sau có giá trị lớn hơn của ký hiệu ở trước. Theo mặc định, giá trị của ký hiệu kiểu liệt kê đầu tiên là 0. Ví dụ:

enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };

Ví dụ

using System;

namespace EnumApplication 
{
   class EnumProgram 
   {
      enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

      static void Main(string[] args) 
      {
         int weekdayStart = (int)Days.Mon;
         int weekdayEnd = (int)Days.Fri;
         
         Console.WriteLine("Monday: {0}", weekdayStart);
         Console.WriteLine("Friday: {0}", weekdayEnd);
         Console.ReadKey();
      }
   }
}

Đây là kết quả khi chạy chương trình:

Monday: 1
Friday: 5

Bạn có muốn xem bài viết tiếp theo không? Nó ở dưới đây nè.

Class trong C# | Comdy
Class trong C# là gì? Làm sao để định nghĩa và sử dụng class trong C#? Bài viết này sẽ hướng dẫn chi tiết cho bạn.


Bài viết liên quan:

Hướng dẫn này sẽ giúp bạn tìm hiểu về đọc ghi file (File I/O) trong C# và sử dụng các lớp tiện ích để đọc ghi file.

Reflection trong C#

  • 6 min read

Reflection trong C# là gì? Ứng dụng của Reflection trong C#. Cách khai báo và sử dụng Reflection trong C#.

Attribute trong C#

  • 7 min read

Attribute trong C# là gì? Có những loại attribute nào trong C#? Làm sao để sử dụng attribute trong C#.