Bài 3 – Kiểu Liệt Kê (Enumerator)

0
207

Xin chào . Tôi đã trở lại, cuối tuần hôm qua quả là một ngày mệt mỏi đối với tôi . Cứ tuần lại đến, tôi phải đèo gia đình mình đi siêu thị để mua một số nhu yếu phẩm hằng ngày . Điều làm tôi ngán ngẩm ở siêu thì này là mỗi mặt hàng họ lại phải để riêng một túi ni-lông đều này hiển nhiên vô cùng tốn kém và tôi lại nhận được thêm hàng tá túi ni-lông mỗi khi đi siêu thị về, và điều này không tốt cho môi trường tí nào !

Này Boo :

– Trong quá trình sử dụng ngôn ngữ C# tôi không thấy về việc tối ưu khi sử dụng các biến nhỉ ? . Tại sao không gói một tập hợp các phần tử có cùng yếu tố và chức năng vào một cái “túi” , và liệu trong C# có cung cấp cho chúng ta một cái “túi” như thế không :D.

– Sure . Có chứ , có lẽ cậu chưa biết . C# cung cấp một kiểu dữ liệu nói theo cách của cậu là một cái “túi” để gói các phần tử lại – Boo thạ thấp giọng và từ tốn đáp.

Hôm nay tôi sẽ chia sẻ với cậu về kiểu dữ liệu Enumerator . Đừng băn khoăn vì ngay sau đây tôi sẽ cậu một định nghĩa về nó :

[box type=”info” ]

Định nghĩa

Kiểu liệt kê đơn giản là tập hợp các tên hằng có giá trị không thay đổi (thường được gọi là danh sách liệt kê).[/box]EnumIs

[box type=”info” ]

* Cách khai báo và sử dụng *

Các bạn hãy xem lại ví dụ ở bài học số 2 về cách sử dụng biểu tượng hằng, chúng ta có hai biểu tượng hằng có quan hệ với nhau:
const int DoDong = 0;
*const int DoSoi = 100; *

Do mục đích mở rộng ta mong muốn thêm một số hằng số khác vào danh sách trên, như các hằng sau:
const int DoNong = 60;
const int DoAm = 40;
*const int DoNguoi = 20; *

Các biểu tượng hằng trên điều có ý nghĩa quan hệ với nhau, cùng nói về nhiệt độ của nước, khi khai báo từng hằng trên có vẻ cồng kềnh và không được liên kết chặt chẽ cho lắm. Thay vào đó C# cung cấp kiểu liệt kê để giải quyết vấn đề trên:
enum NhietDoNuoc

{

DoDong = 0,

DoNguoi = 20,

DoAm = 40,

DoNong = 60,

DoSoi = 100,

}

[/box]

Mỗi kiểu liệt kê có một kiểu dữ liệu cơ sở, kiểu dữ liệu có thể là bất cứ kiểu dữ liệu nguyên nào như int, short, long… tuy nhiên kiểu dữ lịêu của liệt kê không chấp nhận kiểu ký tự. Để khai báo một kiểu liệt kê ta thực hiện theo cú pháp sau:

[box type=”info” ]

* [thuộc tính] [bổ sung] enum <tên liệt kê> [:kiểu cơ sở]*
{
*   danh sách các thành phần liệt kê*
}

[/box]

Thành phần thuộc tính và bổ sung là tự chọn có thể có hoặc không.

Một kiểu liệt kê bắt đầu với từ khóa enum, tiếp sau là một định danh cho kiểu liệt kê:

enum NhietDoNuoc

Thành phần kiểu cơ sở chính là kiểu khai báo cho các mục trong kiểu liệt kê. Nếu bỏ qua thành phần này thì trình biên dịch sẽ gán giá trị mặc định là kiểu nguyên int, tuy nhiên chúng ta có thể sử dụng bất cứ kiểu nguyên nào như ushort hay long,..ngoại trừ kiểu ký tự. Đoạn ví dụ sau khai báo một kiểu liệt kê sử dụng kiểu cơ sở là số nguyên không dấu uint:

enum KichThuoc :uint { Nho = 1, Vua = 2, Lon = 3, }

Lưu ý là khai báo một kiểu liệt kê phải kết thúc bằng một danh sách liệt kê, danh sách liệt kê này phải có các hằng được gán, và mỗi thành phần phải phân cách nhau dấu phẩy. Ví dụ sau minh họa về cách sử dụng kiểu liệt kê

using System; using System.Collections.Generic; using System.Text; namespace Bien { class KieuEnum { enum NhietDoNuoc: int { DoDong = 0, DoNguoi = 20, DoAm = 40, DoNong = 60, DoSoi = 100, } static void Main() { System.Console.WriteLine( “Nhiet do dong: {0}”,(int)NhietDoNuoc.DoDong); System.Console.WriteLine(“Nhiet do nguoi: {0}”, (int)NhietDoNuoc.DoNguoi); System.Console.WriteLine(“Nhiet do am: {0}”, (int)NhietDoNuoc.DoAm); System.Console.WriteLine(“Nhiet do nong: {0}”, (int)NhietDoNuoc.DoNong); System.Console.WriteLine(“Nhiet do soi: {0}”,(int)NhietDoNuoc.DoSoi); Console.ReadLine(); } } }

[box type=”success” ]

Kết quả:

Nhiet do dong: 0

Nhiet do nguoi: 20

Nhiet do am: 40

Nhiet do nong: 60

Nhiet do soi: 100

[/box]

Chú ý: Mỗi thành phần trong kiểu liệt kê tương ứng với một giá trị số, trong trường hợp này là một số nguyên. Nếu chúng ta không khởi tạo cho các thành phần này thì chúng sẽ nhận các giá trị tiếp theo với thành phần đầu tiên là 0. Ta xem thử khai báo sau:

enum Thutu { ThuNhat, ThuHai, ThuBa = 10, ThuTu }

Khi đó giá trị của : ThuNhat là 0, giá trị của ThuHai là 1, giá trị của ThuBa là 10 và giá trị của ThuTu là 11. Chú ý: Kiểu liệt kê là một kiểu hình thức do đó bắt buộc phải thực hiện phép chuyển đổi tường minh với các kiêu giá trị nguyên:

int x = (int) ThuTu.ThuNhat;

Done . Tới trình bày xong rồi nhé .

Vâng ! Cảm ơn Boo. Lần sau chúng ta trò truyện tiếp nhé.

LEAVE A REPLY

Please enter your comment!
Please enter your name here