Thứ Năm, 8 tháng 4, 2010

// // 2 comments

Kiểu liệt kê C#

1 .Đị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ê).

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

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,
}


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:

[thuộc tính] [bổ sung] enum [:kiểu cơ sở]

{

danh sách các thành phần

liệt kê

};


Thành phần thuộc tính và bổ sung 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();

}

}

}

Kết quả:

Nhiet do dong: 0

Nhiet do nguoi: 20

Nhiet do am: 40

Nhiet do nong: 60

Nhiet do soi: 100

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;

2 comments:

Nặc danh nói...

rat hay
thanks!

Nặc danh nói...

Bài viết rất dễ hiểu!!