Bài 10. Ép kiểu trong C#

Trong bài học này, mình sẽ giới thiệu cho các bạn về phương pháp để thực hiện ép kiểu trong ₵#. Việc ép kiểu trong một ngôn từ lập trình là vấn đề cần thiết khi bạn phải liên tục chuyển hóa qua lại giữa các kiểu giữ liệu cho tiện giải quyết. Vậy trong nội dung ngày hôm này tất cả chúng ta sẽ đi tìm tòi về ép kiểu trong ₵# nhé !

Ép kiểu ngầm định

Ép kiểu ngầm định là cách ép kiểu dễ dàng nhất trong ₵#. Việc ép kiểu ngầm định diễn ra auto bởi trình biên dịch. Nhờ phương pháp này tất cả chúng ta có thể chuyển hóa từ một kiểu dữ liệu sang một kiểu dữ liệu có kích cỡ to hơn.

Một chẳng hạn về ép kiểu ngầm định:

1

2

3

4

5

int

ɳ

=

15

;

long

Ҳ

=

ɳ

;

// chuyển hóa từ kiểu int sang long vì long là kiểu dữ liệu có kích cỡ to hơn

float

ƒ

=

7.81

;

double

{d}

=

ƒ

;

// chuyển hóa từ kiểu float sang double vì double là kiểu dữ liệu có kích cỡ to hơn

decimal

de

=

{d}

;

// chuyển hóa từ kiểu double sang decimal vì decimal là kiểu dữ liệu có kích cỡ to hơn

Tất cả chúng ta có thể thấy qua chẳng hạn. Việc ép kiểu ngầm định này sẽ thường thực hiện trên các biến số hay biến đưa kiểu dữ liệu số học (xem lại trong Bài 4. Các kiểu dữ liệu trong ₵#).

Ép kiểu tường minh

Việc ép kiểu tưởng mình là việc sử dụng các keyword rõ ràng và cụ thể để chuyển hóa kiểu dữ liệu. So với cách ép kiểu này, tất cả chúng ta thường dùng nó để chuyển hóa qua lại giữa các kiểu dữ liệu tương đương nhau (thường là kiểu số học).

Cú pháp để sử dụng ép kiểu tường minh như sau:

1

(<kiểu dữ liệuvàgt;)<tên biến cần ép kiểu>

Chẳng hạn về ép kiểu tường minh như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

using

System

.

IO

;

using

System

;

 

namespace

luyencodec_

{

    

class

Program

    

{

        

static

void

Main

(

)

        

{

            

double

α

=

15.5

;

            

int

ɓ

=

(

int

)

α

;

            

Console

.

WriteLine

(

α

)

;

            

Console

.

WriteLine

(

ɓ

)

;

            

            

Console

.

ReadKey

(

)

;

// dừng màn hình

        

}

    

}

}

Chương trình này cho ra kết quả:

1

2

15.5

15

Chương trình trên là một chẳng hạn cho việc ép kiểu tường minh, chương trình đã chuyển hóa giá trị của biến α đưa giá trị kiểu double thành biến ɓ đưa giá trị là một số nguyên. Vì int là kiểu số nguyên không đưa số phẩy động được nên giá trị của biến ɓ sẽ là phần nguyên của α. Việc chuyển hóa từ số thực sang số nguyên cũng là một việc thường thấy trong lập trình.

Chú ý: Việc ép kiểu để chuyển hóa từ kiểu này sang kiểu kia còn một mặt giới hạn là các bạn phải cực kỳ cần trọng trong việc chuyển hóa từ kiểu này sang một kiểu có kích cỡ nhỏ hơn. Nếu như kiểu dữ liệu sau thời điểm chuyển hóa có kích cỡ bé hơn kiểu ban đầu thì chương trình sẽ cho ra kết quả bị sai lệch với ban đầu.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

using

System

.

IO

;

using

System

;

 

namespace

luyencodec_

{

    

class

Program

    

{

        

static

void

Main

(

)

        

{

            

int

α

=

10000

;

            

byte

ɓ

=

(

byte

)

α

;

            

Console

.

WriteLine

(

α

)

;

            

Console

.

WriteLine

(

ɓ

)

;

            

            

Console

.

ReadKey

(

)

;

// dừng màn hình

        

}

    

}

}

Chương trình này sẽ cho ra kết quả:

1

2

10000

16

Hiện thời vì kiểu byte có kích cỡ bé hơn rất là nhiều đối với kiểu int (khoảng từ 0 tới 255) nên biến ɓ sẽ chẳng thể lưu trữ giá trị của biến α được nên đã cho ra một kết quả sai lệch là 16.

Khi tất cả chúng ta học về ép kiểu, tất cả chúng ta có thể đơn giản sử dụng toán tử / một cách chuẩn xác. Khi ta chưa biết gì về ép kiểu tất cả chúng ta chỉ biết rằng toán tử / sẽ cho ra kết quả là phần nguyên kết quả phép tính đó.

Tất cả chúng ta sẽ ép kiểu tường minh cho phép tính chia đó như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

using

System

.

IO

;

using

System

;

 

namespace

luyencodec_

{

    

class

Program

    

{

        

static

void

Main

(

)

        

{

            

double

answer

=

(

double

)

10

/

30

;

            

Console

.

WriteLine

(

answer

)

;

            

            

Console

.

ReadKey

(

)

;

// dừng màn hình

        

}

    

}

}

Chương trình này sẽ cho ra kết quả:

1

0.333333333333333

Nhờ việc ép kiểu cho phép tính như thế mà tất cả chúng ta có thể tính chuẩn xác phép chia trong lập trình.

Ép kiểu sử dụng cách thức có sẵn

Trong ngôn từ lập trình ₵# việc chuyển hóa dữ liệu bằng cách thức đã được bổ trợ sẵn các cách thức như Parse hay TryParse. không chỉ thế, các kiểu dữ liệu đã được khái niệm hay do người dùng khái niệm thì đều sẽ được bổ trợ một cách thức nữa là ToString.

Trong phần này, mình sẽ chỉ giới thiệu 2 cách thức là Parse & ToString vì cách thức TryParse có liên quan đến từ khóa out sẽ được trình bày trong chương về Hàm.

Cách thức Parse

So với cách thức Parse cú pháp khai báo như sau:

1

<kiểu dữ liệuvàgt;.Parse(<giá trịvàgt;);

Cách thức này sẽ chuyển hóa giá trị bên trong ô <giá trịvàgt; thành kiểu dữ liệu tương ứng ở ô <kiểu dữ liệuvàgt;.

Chẳng hạn sử dụng cách thức này:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

using

System

.

IO

;

using

System

;

 

namespace

luyencodec_

{

    

class

Program

    

{

        

static

void

Main

(

)

        

{

            

string

s

=

“123”

;

            

int

α

=

int

.

Parse

(

s

)

;

            

Console

.

WriteLine

(

α

*

2

)

;

            

            

Console

.

ReadKey

(

)

;

// dừng màn hình

        

}

    

}

}

Chương trình này cho ra kết quả:

1

246

Việc tất cả chúng ta nhín thấy số 246 tức là tất cả chúng ta đã chuyển hóa biến s từ dạng chuỗi kí tự thành số nguyên thành công. Giá trị của s"123" sau thời điểm chuyển hóa qua cách thức Parse sẽ trở thành 123 kiểu số nguyên.

Cách thức ToString

Như mình đã nói ở phần trên cách thức ToString được bổ trợ sẵn trong các kiểu dữ liệu đã được khái niệm trong ₵#. So với các kiểu dữ liệu do người dùng khái niệm, cách thức này vẫn được bổ trợ, nhưng để cách thức này có thể trả ra kết quả tất cả chúng ta cần phải sử dụng tới định nghĩa nạp chồng hàm sẽ không được trình bày bước này.

Cú pháp sử dụng cách thức ToString:

1

<tên biếnvàgt;.ToString();

Cách thức này sẽ trả về giá trị xây tương ứng với giá trị được mang vào.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

using

System

.

IO

;

using

System

;

 

namespace

luyencodec_

{

    

class

Program

    

{

        

static

void

Main

(

)

        

{

            

double

{d}

=

0.33

;

            

int

α

=

7810

;

            

string

s1

=

{d}

.

ToString

(

)

,

s2

=

α

.

ToString

(

)

;

            

Console

.

WriteLine

(

s1

+

s2

)

;

            

            

Console

.

ReadKey

(

)

;

// dừng màn hình

        

}

    

}

}

Chương trình này cho ra kết quả:

1

0.33-7810

Chương trình này không cho ra kết quả của phép tính 0.33 + -7810 mà lại cho ra kết quả là 2 giá trị này nối đuôi nhau. Bởi vì tất cả chúng ta đã ép kiểu sang kiểu chuỗi kí tự nên phép + hiện giờ sẽ thêm giá trị của chuỗi kí tự sau lên chuỗi kí tự trước. Giá trị của s1 hiện giờ sẽ là "0.33" còn giá trị của s2 sẽ là "-7810".

Kết luận

Như thế là trong bài học ngày từ bây giờ, mình đã giới thiệu cho các bạn phương pháp để thực hiện chuyển hóa qua lại giữa các kiểu dữ liệu trong ₵# (ép kiểu). Trong bài học kế tiếp mình sẽ trình bày về lớp String tức kiểu dữ liệu chuỗi kí tự. Cảm ơn bạn đã đọc nội dung này. Hãy tiếp tục gắn bó cùng Lập trình không khó trong các nội dung kế tiếp nhé !

(tuy nhiên các bạn có thể tìm hiểu thêm về nội dung ép kiểu trên trang chính của Microsoft tại đây).

Xem Thêm  Thêm và trừ ngày bằng DATEADD trong SQL Server - máy chủ sql trừ ngày

Viết một bình luận