Enum Trong C# – Nguyễn Anh Tuấn

Enum là gì?

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

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.

Nói cách khác, enum là cách mà C# hỗ trợ người dùng gom nhóm các hằng số lại với nhau và có chung một tên gọi (thường các hằng số này sẽ có liên quan với nhau ví dụ như các trạng thái của 1 sự vật, các tính chất của 1 sự vật, . . .) Giờ chúng ta cần xem nếu không có Enum trong một số tình huống bạn phải làm thế nào, chẳng hạn bạn cần một tập hợp chứa các ngày trong tuần. Thông thường bạn định nghĩa ra 7 hằng số tự nhiên để đại diện cho 7 trong tuần 6.PNG Một class với một method mô phỏng lấy ra tên công việc sẽ làm ứng với ngày cụ thể trong tuần. (Giống với thời khóa biểu) 7.PNG Rõ ràng các đoạn mã như vậy là không an toàn. Chẳng hạn như khi bạn gõ các giá trị cho ngày trong tuần chẳng may trùng nhau. Hoặc khi gọi phương thức Timetable.getJob(int) mà truyền vào giá trị nằm ngoài các giá trị định nghĩa trước.
  1. Không phải là kiểu an toàn: Đầu tiên thấy rằng mã (code) của bạn không an toàn, bạn có thể gọi phương thức GetJob(int) và truyền vào bất kỳ giá trị nào.
  2. Không có ý nghĩa trong in ấn: Nếu bạn muốn in ra các ngày trong tuần nó sẽ là các con số,thay vì một chữ có ý nghĩa như “MONDAY”.
Và đây là cách sử dụng Enum để định nghĩa ra các ngày trong tuần.

 8.PNG

Đặc điểm của enum:

  • Là một kiểu dữ liệu tham trị
  • Enum không được phép kế thừa

Khai báo biến enum trong C#

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

enum <tên_enum> { danh_sách_enum };

Tại đây,

  • tên_enum xác định tên kiểu liệt kê.
  • danh_sách_enum là danh sách các định danh được phân biệt 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ụ:

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

Lưu ý:

  • Ta hoàn toàn có thể quy định giá trị cho từng biểu tượng hằng bằng cách trực tiếp khi khai báo

enum Color { RED = 2, BLUE = 4, YELLOW = 6, }

Sử dụng

Ta có thể truy xuất đến từng biểu tượng hằng của enum thông qua toán tử “.” Kèm theo tên biểu tượng hằng muốn truy xuất.

Ví dụ:

WeekDay.SUNDAY;

Lưu ý:

  • Mặc dù bản chất các biểu tượng hằng là đại diện cho các số nguyên nhưng bạn không thể so sánh trực tiếp chúng với các số nguyên được mà phải ép kiểu.

s1rY9.png

Ví dụ:

9.PNG

Để chương trình không báo lỗi ta có thể ép kiểu biểu tượng hằng RED về kiểu int.

Choose == (int)Color.RED

Chúng ta cũng có thể ép kiểu ngược lại từ số nguyên sang kiểu liệt kê.

Color Background = (Color)2; // Background sẽ có giá trị là Color.YELLOW

Sử dụng toán tử == để so sánh các phần tử của enum

Enum là một đối tượng tham chiếu (reference object) giống như class, interface nhưng nó cũng có thể sử dụng cách so sánh ==. Hãy xem các đối tượng tham chiếu (reference object) so sánh thế nào: 10.PNG Với Enum, bạn có thể sử dụng toán tử == để so sánh. 11.PNG

Duyệt trên các phần tử của Enum

Chúng ta có thể duyệt trên tất cả các phần tử của Enum.

Ví dụ:

12.PNG

Enum và Attribute

Bạn có thể gắn các Attribute lên các phần tử của Enum, điều này giúp cho Enum mang nhiều thông tin hơn, và bạn có thể lấy ra các thông tin đó ứng với từng phần tử của Enum.

13.PNG

enum Gender (Giới tính) có 2 phần tử MALE (Nam) và FEMALE (Nữ).

14.PNG

class Gender 15.PNG Và ví dụ sử dụng enum Gender:

16.PNG

Enum có thể có phương thức hay không?

Trong C# enum không thể có phương thức, tuy nhiên trong trường hợp bạn muốn có một cái gì đó giống như Enum và có phương thức bạn có thể định nghĩa một class, class này không cho phép tạo thêm các đối tượng ngoài các đối tượng đã được tạo sẵn của nó.

17.PNG

Share this:

  • Twitter
  • Facebook
Like Loading...

Related

Từ khóa » Sử Dụng Enum Trong C#