Bỏ qua đến nội dung
Bỏ qua điều hướng
Đăng nhập
MT.NET.VN

Viewbh C Sharp Can Ban 8211 Chuong Iii 8211 Nen Tang Ngon Ngu C 0 0 2023 04 04 02 12 24

Tìm kiếm
Thuộc khóa học · baihoc_sub = 14

Khóa học C # căn bản

Bài 11 / 13 trong khóa học.

Xem khóa học
85%
MT LEARNING · LESSON

C Sharp căn bản – Chương III – NỀN TẢNG NGÔN NGỮ C# 0 (0)

C Sharp căn bản – Chương III – NỀN TẢNG NGÔN NGỮ C# 0 (0)

Trong chương trước chúng ta đã tìm hiểu một chương trình C# đơn giản nhất. Chương trình đó chưa đủ để diễn tả một chương trình viết bằng ngôn ngữ C#, có quá nhiều phần và chi tiết đã bỏ qua. Do vậy trong chương này chúng ta sẽ đi sâu vào tìm hiểu cấu trúc và cú pháp của ngôn ngữ C#.

Chương này sẽ thảo luận về hệ thống kiểu dữ liệu, phân biệt giữa kiểu dữ liệu xây dựng sẵn (như int, bool, string…) với kiểu dữ liệu do người dùng định nghĩa (lớp hay cấu trúc do người lập trình tạo ra...). Một số cơ bản khác về lập trình như tạo và sử dụng biến dữ liệu hay hằng cũng được đề cập cùng với cấu trúc liệt kê, chuỗi, định danh, biểu thức và cậu lệnh.

Trong  phần  hai  của  chương  hướng  dẫn  và  minh  họa  việc  sử  dụng  lệnh  phân  nhánh if, switch, while, do…while, for, và foreach. Và các toán tử như phép gán, phép toán logic, phép toán quan hệ, và toán học…

Như chúng ta đã biết C# là một ngôn ngữ hướng đối tượng rất mạnh, và công việc của người lập trình là kế thừa để tạo và khai thác các đối tượng. Do vậy để nắm vững và phát triển tốt người lập trình cần phải đi từ những bước đi dầu tiên tức là đi vào tìm hiểu những phần cơ bản và cốt lõi nhất của ngôn ngữ.

Kiểu dữ liệu

 

C# là ngôn ngữ lập trình mạnh về kiểu dữ liệu, một ngôn ngữ mạnh về kiểu dữ liệu là phải khai  báo  kiểu  của  mỗi  đối  tượng  khi  tạo  (kiểu  số  nguyên,  số  thực,  kiểu  chuỗi,  kiểu  điều khiển…) và trình biên dịch sẽ giúp cho người lập trình không bị lỗi khi chỉ cho phép một loại kiểu dữ liệu có thể được gán cho các kiểu dữ liệu khác. Kiểu dữ liệu của một đối tượng là một tín hiệu để trình biên dịch nhận biết kích thước của một đối tượng (kiểu int có kích thước là 4 byte) và khả năng của nó (như một đối tượng button có thể vẽ, phản ứng khi nhấn,…).

Tương tự như C++ hay Java, C# chia thành hai tập hợp kiểu dữ liệu chính: Kiểu xây dựng sẵn (built- in) mà ngôn ngữ cung cấp cho người lập trình và kiểu được người dùng định nghĩa (user-defined) do người lập trình tạo ra.

C# phân tập hợp kiểu dữ liệu này thành hai loại: Kiểu dữ liệu giá trị (value) và kiểu dữ liệu tham chiếu (reference). Việc phân chi này do sự khác nhau khi lưu kiểu dữ liệu giá trị và kiểu dữ liệu tham chiếu trong bộ nhớ. Đối với một kiểu dữ liệu giá trị thì sẽ được lưu giữ kích thước thật trong bộ nhớ đã cấp phát là stack. Trong khi đó thì địa chỉ của kiểu dữ liệu tham chiếu thì được lưu trong stack nhưng đối tượng thật sự thì lưu trong bộ nhớ heap.

Nếu chúng ta có một đối tượng có kích thước rất lớn thì việc lưu giữ chúng trên bộ nhớ heap rất có ích, trong chương 4 sẽ trình bày những lợi ích và bất lợi khi làm việc với kiểu dữ liệu tham chiếu, còn trong chương này chỉ tập trung kiểu dữ kiểu cơ bản hay kiểu xây dựng sẵn.

Ghi chú: Tất cả các kiểu dữ liệu  xây dựng sẵn là kiểu  dữ liệu  giá trị  ngoại trừ các đối tượng và chuỗi. Và tất cả các kiểu do người dùng định nghĩa ngoại trừ kiểu cấu trúc đều là kiểu dữ liệu tham chiếu.

Ngoài ra C# cũng hỗ trợ một kiểu con trỏ C++, nhưng hiếm khi được sử dụng, và chỉ khi nào làm  việc với  những đoạn  mã lệnh không  được  quản lý (unmanaged  code).  Mã lệnh  không được quản lý là các lệnh được viết bên ngoài nền .MS.NET, như là các đối tượng COM.

 

Kiểu dữ liệu xây dựng sẵn

 

Ngôn ngữ C# đưa ra các kiểu dữ liệu xây dựng sẵn rất hữu dụng, phù hợp với một ngôn ngữ lập trình hiện đại, mỗi kiểu dữ liệu được ánh xạ đến một kiểu dữ liệu được hỗ trợ bởi hệ thống  xác  nhận  ngôn  ngữ  chung  (Common  Language  Specification:  CLS)  trong  MS.NET. Việc ánh xạ các kiểu dữ liệu nguyên thuỷ của C# đến các kiểu dữ liệu của .NET sẽ đảm bảo các đối tượng được tạo ra trong C# có thể được sử dụng đồng thời với các đối tượng được tạo bởi bất cứ ngôn ngữ khác được biên dịch bởi .NET, như VB.NET.

Mỗi  kiểu  dữ  liệu  có  một  sự  xác  nhận  và  kích  thước  không  thay  đổi,  không  giống  như C++, int trong C# luôn có kích thước là 4 byte bởi vì nó được ánh xạ từ kiểu Int32 trong . NET.

Bảng 3.1 sau sẽ mô tả một số các kiểu dữ liệu được xây dựng sẵn

 

 

Kiểu C#

Số byte

Kiểu .NET

Mô tả

byte

1

Byte

Số nguyên dương không dấu từ 0–255

char

2

Char

Ký tự Unicode

bool

1

Boolean

Giá trị logic true/ false

sbyte

1

Sbyte

Số nguyên có dấu ( từ –128 đến 127)

short

2

Int16

Số  nguyên  có  dấu  giá  trị  từ  -32768  đến

32767.

ushort

2

Uịnt16

Số nguyên không dấu 0 – 65.535

int

4

Int32

Số  nguyên  có  dấu  –2.147.483.647 và

2.147.483.647

uint

4

Uint32

Số nguyên không dấu 0 – 4.294.967.295

float

4

Single

Kiểu dấu chấm động, giá trị xấp xỉ từ 3,4E–

38 đến 3,4E+38, với 7 chữ số có nghĩa..

double

8

Double

Kiểu  dấu  chấm  động  có  độ  chính  xác  gấp đôi, giá trị xấp xỉ từ 1,7E-308 đến 1,7E+308,

với 15,16 chữ số có nghĩa.

decimal

8

Decimal

Có độ chính xác đến 28 con số và giá trị thập phân,  được  dùng  trong  tính  toán  tài  chính, kiểu này đòi hỏi phải có hậu tố “m” hay “M”

theo sau giá trị.

 

long

8

Int64

Kiểu   số   nguyên  có   dấu   có  giá  trị   trong khoảng :

-9.223.370.036.854.775.808 đến

9.223.372.036.854.775.807

ulong

8

Uint64

Số nguyên không dấu từ 0 đến

0xffffffffffffffff

Bảng 3.1 : Mô tả các kiểu dữ liệu xây dựng sẵn.

 

 

Ghi chú: Kiểu giá trị logic chỉ có thể nhận được giá trị là true hay false mà thôi. Một giá trị nguyên không thể gán vào một biến kiểu logic trong C# và không có bất cứ chuyển đổi ngầm định nào. Điều này khác với C/C++, cho phép biến logic được gán giá trị nguyên, khi đó giá trị nguyên 0 là false và các giá trị còn lại là true.

 

Chọn kiểu dữ liệu

 

Thông  thường  để  chọn  một  kiểu  dữ  liệu  nguyên  để  sử  dụng  như short,  int  hay  long  thường dựa vào độ lớn của giá trị muốn sử dụng. Ví dụ, một biến ushort có thể lưu giữ giá trịtừ 0 đến 65.535, trong khi biến ulong có thể lưu giữ giá trị từ 0 đến 4.294.967.295, do đó tùy vào miền giá trị của phạm vi sử dụng biến mà chọn các kiểu dữ liệu thích hợp nhất. Kiểu dữ liệu int thường được sử dụng nhiều nhất trong lập trình vì với kích thước 4 byte của nó cũng đủ để lưu các giá trị nguyên cần thiết.Kiểu số nguyên có dấu thường được lựa chọn sử dụng nhiều nhất trong kiểu số trừ khi có lý do chính đáng để sử dụng kiểu dữ liệu không dấu.

 

Stack và Heap

 

 

 

Stack là một cấu trúc dữ liệu lưu trữ thông tin dạng xếp chồng tức là vào sau ra trước (Last In First Out : LIFO), điều này giống như chúng ta có một chồng các đĩa, ta cứ xếp các đĩa vào chồng và khi lấy ra thì đĩa nào nằm trên cùng sẽ được lập ra trước, tức là đĩa vào sau sẽ được lấy ra trước.

Trong C#, kiểu giá trị như kiểu số nguyên được cấp phát trên stack, đây là vùng  nhớ  được  thiết  lập  để  lưu  các  giá  trị,  và  vùng  nhớ  này  được  tham chiếu bởi tên của biến.

Kiểu tham chiếu như các đối tượng thì được cấp phát trên heap. Khi một đối tượng được cấp phát trên heap thì địa chỉ của nó được trả về, và địa chỉ này được gán đến một tham chiếu.

Thỉnh  thoảng  cơ  chế  thu  gom  sẽ  hũy  đối  tượng  trong stack sau  khi  một vùng trong stack được đánh dấu là kết thúc. Thông thường một vùng trong stack được  định  nghĩa  bởi  một  hàm.  Do  đó,  nếu  chúng  ta  khai  báo  một biến cục bộ trong một hàm là một đối tượng thì đối tượng này sẽ đánh dấu để hũy khi kết thúc hàm. Những đối tượng trên heap sẽ được thu gom sau khi một tham chiếu cuối cùng đến đối tượng đó được gọi.

 

Cách  tốt  nhất  khi  sử  dụng  biến  không  dấu  là  giá  trị  của  biến  luôn  luôn  dương,  biến  này thường thể hiện một thuộc tính nào đó có miền giá trị dương. Ví dụ khi cần khai báo một biến lưu  giữ  tuổi  của  một  người  thì  ta  dùng  kiểu byte (số  nguyên  từ  0-255)  vì  tuổi  của  người không thể nào âm được.

Kiểu float, double, và decimal đưa ra nhiều mức độ khác nhau về kích thước cũng như độ chính xác.Với thao tác trên các phân số nhỏ thì kiểu float là thích hợp nhất. Tuy nhiên lưu ý rằng trình biên dịch luôn luôn hiểu bất cứ một số thực nào cũng là một số kiểu double trừ khi chúng ta khai báo rõ ràng. Để gán một số kiểu float thì số phải có ký tự f theo sau.

float soFloat = 24f;

Kiểu dữ liệu ký tự thể hiện các ký tự Unicode, bao gồm các ký tự đơn giản, ký tự theo mã Unicode và các ký tự thoát khác được bao trong những dấu nháy đơn. Ví dụ, A là một ký tự đơn giản trong khi \u0041 là một ký tự Unicode. Ký tự thoát là những ký tự đặc biệt bao gồm hai ký tự liên tiếp trong đó ký tự dầu tiên là dấu chéo ‘\’. Ví dụ, \t là dấu tab. Bảng 3.2 trình bày các ký tự đặc biệt.

 

 

Ký tự

Ý nghĩa

\’

Dấu nháy đơn

\”

Dấu nháy kép

\\

Dấu chéo

\0

Ký tự null

\a

Alert

 

 

\b

Backspace

\f

Sang trang form feed

\n

Dòng mới

\r

Đầu dòng

\t

Tab ngang

\v

Tab dọc

Bảng 3.2 : Các kiểu ký tự đặc biệt.

 

Chuyển đổi các kiểu dữ liệu

 

Những đối tượng của một kiểu dữ liệu này có thể được chuyển sang những đối tượng của một kiểu dữ liệu khác thông qua cơ chế chuyển đổi tường minh hay ngầm định. Chuyển đổi nhầm định được thực hiện một cách tự động, trình biên dịch sẽ thực hiện công việc này. Còn chuyển đổi tường minh diễn ra khi chúng ta gán ép một giá trị cho kiểu dữ liệu khác.

Việc chuyển đổi giá trị ngầm định được thực hiện một cách tự động và đảm bảo là không mất thông tin. Ví dụ, chúng ta có thể gán ngầm định một số kiểu short (2 byte) vào một số kiểu int (4 byte) một cách ngầm định. Sau khi gán hoàn toàn không mất dữ liệu vì bất cứ giá trị nào của short cũng thuộc về int:

 

short x = 10;

 

int y = x;  // chuyển đổi ngầm định

Tuy nhiên, nếu chúng ta thực hiện chuyển đổi ngược lại, chắc chắn chúng ta sẽ bị mất thông tin. Nếu giá trị của số nguyên đó lớn hơn 32.767 thì nó sẽ bị cắt khi chuyển đổi. Trình biên dịch sẽ không thực hiện việc chuyển đổi ngầm định từ số kiểu int sang số kiểu short:

short x;

 

int y = 100;

 

x = y;      // Không biên dịch, lỗi !!!

Để không bị lỗi chúng ta phải dùng lệnh gán tường minh, đoạn mã trên được viết lại như sau:

 

short x;

 

int y = 500;

 

x = (short) y;      // Ép kiểu tường minh, trình biên dịch không báo lỗi

 

Biến và hằng

 

Một biến là một vùng lưu trữ với một kiểu dữ liệu. Trong ví dụ trước cả x, và y điều là biến. Biến có thể được gán giá trị và cũng có thể thay đổi giá trị khi thực hiện các lệnh trong chương trình.

Để tạo một biến chúng ta phải khai báo kiểu của biến và gán cho biến một tên duy nhất. Biến có thể được khởi tạo giá trị ngay khi được khai báo, hay nó cũng có thể được gán một giá trị mới vào bất cứ lúc nào trong chương trình. Ví dụ 3.1 sau minh họa sử dụng biến.

Ví dụ 3.1: Khởi tạo và gán giá trị đến một biến.

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

 

class MinhHoaC3

 

{

 

static void Main()

 

{

 

int bien1 = 9;

 

System.Console.WriteLine(“Sau khi khoi tao: bien1 ={0}”, bien1);

 

bien1 = 15;

 

System.Console.WriteLine(“Sau khi gan: bien1 ={0}”, bien1);

 

}

 

}

 

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

Kết quả:

 

Sau khi khoi tao: bien1 = 9

 

Sau khi gan: bien1 = 15

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

Ngay khi khai báo biến ta đã gán giá trị là 9 cho biến, khi xuất biến này thì biến có giá trị là 9. Thực hiện phép gán biến cho giá trị mới là 15 thì biến sẽ có giá trị là 15 và xuất kết quả là 15.

 

Gán giá trị xác định cho biến

 

C#  đòi  hỏi  các  biến  phải  được  khởi  tạo  trước  khi  được  sử  dụng.  Để  kiểm  tra  luật  này chúng ta thay đổi dòng lệnh khởi tạo biến bien1 trong ví dụ 3.1 như sau:

int  bien1;

và giữ nguyên phần còn lại ta được ví dụ 3.2:

Ví dụ 3.2: Sử dụng một biến không khởi tạo.

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

 

class MinhHoaC3

 

{

 

static void Main()

 

{

 

int bien1;

 

System.Console.WriteLine(“Sau khi khoi tao: bien1 ={0}”, bien1);

 

bien1 = 15;

 

System.Console.WriteLine(“Sau khi gan: bien1 ={0}”, bien1);

 

}

 

}

 

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

Khi biên dịch đoạn chương trình trên thì trình biên dịch C# sẽ thông báo một lỗi sau:

 

...error CS0165: Use of unassigned local variable ‘bien1’

 

Việc sử dụng biến khi chưa được khởi tạo là không hợp lệ trong C#. Ví dụ 3.2 trên không hợp lệ.

Tuy nhiên không nhất thiết lúc nào chúng ta cũng phải khởi tạo biến. Nhưng để dùng được thì bắt buộc phải gán cho chúng một giá trị trước khi có một lệnh nào tham chiếu đến biến đó. Điều này được gọi là gán giá trị xác định cho biến và C# bắt buộc phải thực hiện điều này.

Ví dụ 3.3 minh họa một chương trình đúng.

Ví dụ 3.3: Biến không được khi tạo nhưng sau đó được gán giá trị.

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

 

class MinhHoaC3

 

{

 

static void Main()

 

{

 

int bien1;

 

bien1 = 9;

 

System.Console.WriteLine(“Sau khi khoi tao: bien1 ={0}”, bien1);

 

bien1 = 15;

 

System.Console.WriteLine(“Sau khi gan: bien1 ={0}”, bien1);

 

}

 

}

 

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

 

Hằng

 

Hằng cũng là một biến nhưng giá trị của hằng không thay đổi. Biến là công cụ rất mạnh,tuy nhiên khi làm việc với một giá trị được định nghĩa là không thay đổi, ta phải đảm bảo giátrị của nó không được thay đổi trong suốt chương trình. Ví dụ, khi lập một chương trình thí nghiệm hóa học liên quan đến nhiệt độ sôi, hay nhiệt độ đông của nước, chương trình cần khai báo hai biến là DoSoi và DoDong, nhưng không cho phép giá trị của hai biến này bị thay đổi hay bị gán. Để ngăn ngừa việc gán giá trị khác, ta phải sử dụng biến kiểu hằng.

Hằng được phân thành ba loại:  giá trị hằng (literal), biểu tượng hằng (symbolic constants), kiểu liệu kê (enumerations).

Giá trị hằng: ta có một câu lệnh gán như sau:

 

x = 100;

Giá trị 100 là giá trị hằng. Giá trị của 100 luôn là 100. Ta không thể gán giá trị khác cho 100 được.

Biểu tượng hằng: gán một tên cho một giá trị hằng, để tạo một biểu tượng hằng dùng từ khóa const và cú pháp sau:

 

<const> <type> <tên hằng> = <giá trị>;

 

Một biểu tượng hằng phải được khởi tạo khi khai báo, và chỉ khởi tạo duy nhất một lần trong suốt chương trình và không được thay đổi. Ví dụ:

const int DoSoi = 100;

Trong khai báo trên, 32 là một hằng số và DoSoi là một biểu tượng hằng có kiểu nguyên. Ví dụ 3.4 minh họa việc sử dụng những biểu tượng hằng.

Vi dụ 3.4: Sử dụng biểu tượng hằng.

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

 

class MinhHoaC3

 

{

 

static void Main()

 

{

 

const int DoSoi = 100;    // Độ C

 

const int DoDong = 0;    // Độ C

 

System.Console.WriteLine( “Do dong cua nuoc {0}”, DoDong ); System.Console.WriteLine( “Do soi cua nuoc {0}”, DoSoi );

}

 

}

 

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

Kết quả:

 

Do dong cua nuoc 0

 

Do soi cua nuoc 100

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

Ví dụ 3.4 tạo ra hai biểu tượng hằng chứa giá trị nguyên: DoSoi và DoDong, theo qui tắc đặt tên hằng thì tên hằng thường được đặt theo cú pháp Pascal, nhưng điều này không đòi hỏi bởi ngôn ngữ nên ta có thể đặt tùy ý.

Việc dùng  biểu  thức  hằng này sẽ  làm cho  chương  trình  được viết  tăng  thêm phần  ý nghĩa cùng với sự dễ hiểu. Thật sự chúng ta có thể dùng hằng số là 0 và 100 thay thế cho hai biểu tượng hằng trên, nhưng khi đó chương trình không được dễ hiểu và không được tự nhiên lắm. Trình biên dịch không bao giờ chấp nhận một lệnh gán giá trị mới cho một biểu tượng hằng.

Ví dụ 3.4 trên có thể được viết lại như sau

…

 

class MinhHoaC3

 

{

 

static void Main()

 

{

 

const int DoSoi = 100;    // Độ C

 

const int DoDong = 0;    // Độ C

 

System.Console.WriteLine( “Do dong cua nuoc {0}”, DoDong );

 

System.Console.WriteLine( “Do soi cua nuoc {0}”, DoSoi );

 

DoSoi = 200;

 

}

 

}

 

Khi đó trình biên dịch sẽ phát sinh một lỗi sau:

 

error CS0131: The left-hand side of an assignment must be a variable, property or indexer.

Kiểu liệt kê

 

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ê).

Trong ví dụ 3.4, 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,

}

 

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 <tên liệt kê> [: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  là  tự  chọn  sẽ  được  trình  bày  trong  phần  sau  của  sách.

Trong phần này chúng ta sẽ tập trung vào phần còn lại của khai báo. 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.

Ta viết lại ví dụ minh họa 3-4 như sau.

Ví dụ 3.5: Sử dụng kiểu liệt kê để đơn giản chương trình.

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

 

class MinhHoaC3

 

{

 

// Khai báo kiểu liệt kê enum NhietDoNuoc

{

 

DoDong = 0, DoNguoi = 20, DoAm  = 40, DoNong = 60, DoSoi  = 100,

}

 

static void Main()

 

{

 

System.Console.WriteLine( “Nhiet do dong: {0}”, NhietDoNuoc.DoDong); System.Console.WriteLine( “Nhiet do nguoi: {0}”, NhietDoNuoc.DoNguoi); System.Console.WriteLine( “Nhiet do am: {0}”, NhietDoNuoc.DoAm); System.Console.WriteLine( “Nhiet do nong: {0}”, NhietDoNuoc.DoNong); System.Console.WriteLine( “Nhiet do soi: {0}”, NhietDoNuoc.DoSoi);

}

 

}

 

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

Kết quả:

 

Nhiet do dong: 0

 

Nhiet do nguoi: 20

 

Nhiet do am: 40

 

Nhiet do nong: 60

 

Nhiet do soi: 100

—–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—-–—

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.

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 = (in

ĐÁNH GIÁ NỘI DUNG 0.0/5 0 lượt đánh giá
Bạn thấy nội dung này thế nào?
Mỗi trình duyệt/tài khoản được chấm lại sau 24 giờ.
Báo bài lỗiGiúp MT.Net.VN phát hiện nội dung cần kiểm tra
Báo lỗi được ghi vào hệ thống để Admin kiểm tra. Không dùng chức năng này để gửi hỗ trợ cá nhân.

Bài học liên quan

Các bài khác có cùng khóa học cha theo baihoc_sub.

Home Dịch vụ Khóa học CPanel