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.
Lập Trình C#Lập Trình C# Cơ Bản
Bài Viết Liên Quan:
Sử dụng chuỗi kết nối Redis-CLI trong StackExchange.Redis
Trung Nguyen 18/10/2021
Sử dụng chuỗi kết nối Redis-CLI trong StackExchange.Redis

Bài viết này sẽ hướng dẫn chúng ta cách viết một phương thức mở rộng để phân tích chuỗi kết nối redis-cli có thể sử dụng với thư viện StackExchange.Redis.

Sử dụng .NET để xác thực JSON bằng lược đồ JSON
Trung Nguyen 17/10/2021
Sử dụng .NET để xác thực JSON bằng lược đồ JSON

JSON được cho là một trong những định dạng dữ liệu phổ biến nhất hiện nay. Chúng ta sẽ tìm hiểu cách đọc và xác thực JSON bằng lược đồ JSON.

Lấy tên thuộc tính từ biểu thức Lambda trong .NET
Trung Nguyen 16/10/2021
Lấy tên thuộc tính từ biểu thức Lambda trong .NET

Trong bài viết ngắn nhưng có giá trị này, chúng ta sẽ triển khai các phương thức mở rộng cho phép chúng ta truy xuất PropertyInfo từ một biểu thức lambda.

Một số mẹo lập trình thú vị
Trung Nguyen 16/10/2021
Một số mẹo lập trình thú vị

Những mẹo về kỹ thuật lập trình có thể giúp xây dựng một ứng dụng và hy vọng rằng, biết một số mẹo này sẽ giúp bạn giải quyết các vấn đề trong tương lai.