Kiểu dữ liệu Enum và Structure
Kiểu dữ liệu enum
Một Enumeration (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ởi 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 tính kế thừa.
Khai báo biến enum
Cú pháp khai báo:
enum enum_name{ enumeration list };
Trong đó:
enum_name
chỉ ra kiểu củaenum
- Các phần trong danh sách
enum
, ngăn cách nhau bởi dấu phẩy (,)
Mỗi biểu tượng trong danh sách liệt kê này đại diện cho một giá trị nguyên, biểu tượng sau có giá trị lớn hơn của biểu tượng ở trước. Theo mặc định, giá trị của biểu tượng kiểu liệt kê đầu tiên là 0.
Ví dụ EnumDemo sau đây sẽ minh hoạ rõ về cách sử dụng enum
:
Kiểu dữ liệu struct
Trong C#, một cấu trúc (structure) là một kiểu dữ liệu. Nó giúp bạn tạo một biến đơn mà giữ dữ liệu liên quan của các kiểu dữ liệu đa dạng. Từ khóa struct trong C# được sử dụng để tạo một cấu trúc (structure).
Các cấu trúc được sử dụng để biểu diễn một bản ghi (record). Giả sử bạn muốn theo dõi các cuốn sách trong một thư viện. Bạn có thể muốn theo dõi các thuộc tính sau của mỗi cuốn sách:
- Title
- Author
- Subject
- Book ID
Định nghĩa cấu trúc
Để định nghĩa cấu trúc, bạn phải sử dụng lệnh struct
. Câu lệnh struct
định nghĩa một kiểu dữ liệu mới, với hơn một thành viên trong chương trình của bạn.
Khai báo cấu trúc Books:
struct Books { public string title; public string author; public string subject; public int book_id; };
Ví dụ StructDemo sau đây sẽ hướng dẫn chi tiết cách sử dụng cấu trúc:
Đặc điểm của kiểu cấu trúc trong C#
Ở trên, bạn đã sử dụng một cấu trúc Books đơn giản. Các cấu trúc trong C# là khá khác với kiểu cấu trúc truyền thống trong C hoặc C++. Cấu trúc trong C# có các đặc điểm sau:
- Cấu trúc có thể có các phương thức, các trường, indexer, thuộc tính, phương thức operator, và sự kiện.
- Cấu trúc có thể có các constructor đã được định nghĩa, nhưng không có destructor. Tuy nhiên, bạn không thể định nghĩa một constructor mặc định cho một cấu trúc. Phương thức khởi tạo mặc định được định nghĩa tự động và không thể bị thay đổi.
- Không giống các lớp, cấu trúc không thể kế thừa từ cấu trúc hoặc lớp khác.
- Cấu trúc không thể được sử dụng như là một 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.
- Thành viên cấu trúc không thể được xác định ở dạng abstract, virtual, hoặc protected.
- Khi bạn tạo một đối tượng Struct bởi sử dụng toán tử new, nó lấy đối tượng đã tạo và constructor thích hợp được gọi. Không giống 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, thì các trường chưa được gán và đối tượng không thể được sử dụng tới khi tất cả trường đó được khởi tạo.
So sánh lớp với cấu trúc
Lớp và Cấu trúc trong C# có một số điểm khác nhau cơ bản sau:
- Các Lớp là các kiểu tham chiếu, còn cấu trúc là các kiểu giá trị.
- Cấu trúc không hỗ trợ tính kế thừa.
- Cấu trúc không có constructor mặc định.
Ví dụ StructVsClassDemo sau đây sẽ giải thích sự khác nhau trên: