Trong bài học này, mình sẽ giới thiệu cho các bạn về cách để thực hiện ép kiểu trong C#. Việc ép kiểu trong một ngôn ngữ lập trình là điều cần thiết khi bạn phải liên tục chuyển đổi qua lại giữa các kiểu giữ liệu cho tiện xử lý. Vậy trong bài viết ngày hôm này chúng ta sẽ đi tìm hiểu về ép kiểu trong C# nhé !
Ép kiểu ngầm định
Ép kiểu ngầm định là cách ép kiểu đơn giản nhất trong C#. Việc ép kiểu ngầm định diễn ra tự động bởi trình biên dịch. Nhờ cách này chúng ta có thể chuyển đổi từ một kiểu dữ liệu sang một kiểu dữ liệu có kích thước lớn hơn.
Một ví dụ về ép kiểu ngầm định:
int n = 15; long x = n; // chuyển đổi từ kiểu int sang long vì long là kiểu dữ liệu có kích thước lớn hơn float f = 7.81; double d = f; // chuyển đổi từ kiểu float sang double vì double là kiểu dữ liệu có kích thước lớn hơn decimal de = d; // chuyển đổi từ kiểu double sang decimal vì decimal là kiểu dữ liệu có kích thước lớn hơn
Chúng ta có thể thấy qua ví dụ. 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 mang kiểu dữ liệu số học (xem lại trong Bài 4. Các kiểu dữ liệu trong C#).
Ép kiểu tường minh
Việc ép kiểu tưởng mình là việc sử dụng các từ khóa rõ ràng để chuyển đổi kiểu dữ liệu. Đối với cách ép kiểu này, chúng ta thường dùng nó để chuyển đổi qua lại giữa các kiểu dữ liệu tương tự nhau (thường là kiểu số học).
Cú pháp để sử dụng ép kiểu tường minh như sau:
(<kiểu dữ liệu>)<tên biến cần ép kiểu>
Ví dụ về ép kiểu tường minh như sau:
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { double a = 15.5; int b = (int)a; Console.WriteLine(a); Console.WriteLine(b); Console.ReadKey(); // dừng màn hình } } }
Chương trình này cho ra kết quả:
15.5 15
Chương trình trên là một ví dụ cho việc ép kiểu tường minh, chương trình đã chuyển đổi giá trị của biến a
mang giá trị kiểu double
thành biến b
mang giá trị là một số nguyên. Vì int
là kiểu số nguyên không mang số phẩy động được nên giá trị của biến b
sẽ là phần nguyên của a
. Việc chuyển đổi từ số thực sang số nguyên cũng là một việc thường thấy trong lập trình.
Lưu ý: Việc ép kiểu để chuyển đổi từ kiểu này sang kiểu kia còn một mặt hạn chế là các bạn phải cực kỳ cần trọng trong việc chuyển đổi từ kiểu này sang một kiểu có kích thước bé hơn. Nếu như kiểu dữ liệu sau khi chuyển đổi có kích thước nhỏ 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.
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { int a = 10000; byte b = (byte)a; Console.WriteLine(a); Console.WriteLine(b); Console.ReadKey(); // dừng màn hình } } }
Chương trình này sẽ cho ra kết quả:
10000 16
Lúc này vì kiểu byte có kích thước nhỏ hơn rất nhiều so với kiểu int
(khoảng từ 0 tới 255) nên biến b
sẽ không thể lưu trữ giá trị của biến a
được nên đã cho ra một kết quả sai lệch là 16.
Khi chúng ta học về ép kiểu, chúng ta có thể dễ dàng sử dụng toán tử /
một cách chính xác. Khi ta chưa biết gì về ép kiểu 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 đó.
Chúng ta sẽ ép kiểu tường minh cho phép tính chia đó như sau:
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ả:
0.333333333333333
Nhờ việc ép kiểu cho phép tính như vậy mà chúng ta có thể tính chính xác phép chia trong lập trình.
Ép kiểu sử dụng phương thức có sẵn
Trong ngôn ngữ lập trình C# việc chuyển đổi dữ liệu bằng phương thức đã được hỗ trợ sẵn các phương thức như Parse
hay TryParse
. Ngoài ra, các kiểu dữ liệu đã được định nghĩa hay do người dùng định nghĩa thì đều sẽ được hỗ trợ một phương thức nữa là ToString
.
Trong phần này, mình sẽ chỉ giới thiệu 2 phương thức là Parse
và ToString
vì phương thức TryParse
có liên quan tới từ khóa out
sẽ được trình bày trong chương về Hàm.
Phương thức Parse
Đối với phương thức Parse
cú pháp khai báo như sau:
<kiểu dữ liệu>.Parse(<giá trị>);
Phương thức này sẽ chuyển đổi giá trị bên trong ô <giá trị>
thành kiểu dữ liệu tương ứng ở ô <kiểu dữ liệu>
.
Ví dụ sử dụng phương thức này:
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { string s = "123"; int a = int.Parse(s); Console.WriteLine(a * 2); Console.ReadKey(); // dừng màn hình } } }
Chương trình này cho ra kết quả:
246
Việc chúng ta nhín thấy số 246 tức là chúng ta đã chuyển đổi biến s
từ dạng chuỗi kí tự thành số nguyên thành công. Giá trị của s
là "123"
sau khi chuyển đổi qua phương thức Parse sẽ trở thành 123
kiểu số nguyên.
Phương thức ToString
Như mình đã nói ở phần trên phương thức ToString được hỗ trợ sẵn trong các kiểu dữ liệu đã được định nghĩa trong C#. Đối với các kiểu dữ liệu do người dùng định nghĩa, phương thức này vẫn được hỗ trợ, nhưng để phương thức này có thể trả ra kết quả chúng ta cần phải sử dụng tới khái niệm nạp chồng hàm sẽ không được trình bày ở đây.
Cú pháp sử dụng phương thức ToString:
<tên biến>.ToString();
Phương thức này sẽ trả về giá trị xây tương ứng với giá trị được đưa vào.
using System.IO; using System; namespace luyencodec_ { class Program { static void Main() { double d = 0.33; int a = -7810; string s1 = d.ToString(), s2 = a.ToString(); Console.WriteLine(s1 + s2); Console.ReadKey(); // dừng màn hình } } }
Chương trình này cho ra kết quả:
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ì chúng ta đã ép kiểu sang kiểu chuỗi kí tự nên phép +
lúc này 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
lúc này sẽ là "0.33"
còn giá trị của s2
sẽ là "-7810"
.
Tổng kết
Như vậy là trong bài học ngày hôm nay, mình đã giới thiệu cho các bạn cách để thực hiện chuyển đổi qua lại giữa các kiểu dữ liệu trong C# (ép kiểu). Trong bài học tiếp theo 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 bài viết này. Hãy tiếp tục đồng hành cùng Lập trình không khó trong các bài viết tiếp theo nhé !
(ngoài ra các bạn có thể tham khảo thêm về bài viết ép kiểu trên trang chủ của Microsoft tại đây).
Để lại một bình luận