Nội dung
Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:
- CẤU TRÚC LỆNH CỦA C# viết trên nền Console Application.
- CẤU TRÚC NHẬP XUẤT của C# trên nền Console Application.
- BIẾN trong C#.
- KIỂU DỮ LIỆU trong C#.
Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:
- Khái niệm về kiểu dữ liệu object.
- Boxing và unboxing trong C#.
- Từ khóa var trong C#.
Khái niệm về kiểu dữ liệu object
Kiểu dữ liệu object:
- Là một kiểu dữ liệu cơ bản của tất cả các kiểu dữ liệu trong .NET.
- Mọi kiểu dữ liệu đều được kế thừa từ System.Object (khái niệm về kế thừa sẽ được trình bày trong bài TÍNH KẾ THỪA TRONG C#).
- Thuộc kiểu dữ liệu tham chiếu (đã trình bày ở bài KIỂU DỮ LIỆU TRONG C#).
Kiểu dữ liệu object cung cấp một số phương thức ảo cho phép mình overload để sử dụng (những khái niệm này sẽ được trình bày trong bài TÍNH KẾ THỪA TRONG C#)
- Một số phương thức tiêu biểu nằm trong object:
- Ở bài học này chúng ta chỉ tìm hiểu các phương thức trên ở mức khái niệm. Trong các bài học sau sẽ ứng dụng vào ví dụ, khi đó sẽ có giải thích chi tiết về các phương thức trên.
Boxing và unboxing trong C#
Boxing là quá trình chuyển dữ liệu từ kiểu dữ liệu giá trị sang kiểu dữ liệu tham chiếu.
- Quá trình boxing:
- Khởi tạo một đối tượng trong vùng nhớ Heap (đã được trình bày trong bài KIỂU DỮ LIỆU TRONG C#).
- Copy giá trị của biến có kiểu dữ liệu giá trị vào đối tượng này.
Quá trình boxing được thực hiện ngầm định.
Ví dụ:
// Khởi tạo biến Value kiểu int (kiểu dữ liệu giá trị)
int Value = 109;
/* thực hiện boxing bằng cách:
* Khởi tạo đối tượng ObjectValue kiểu object
* Gán giá trị của biến Value vào ObjectValue */
object ObjectValue = Value;
- Như phần trước mình đã trình bày là mọi kiểu dữ liệu đều kế thừa từ lớp System.Object nên có thể gán giá trị của kiểu dẫn xuất cho kiểu dữ liệu cha (sẽ được trình bày trong bài TÍNH KẾ THỪA TRONG C#). Trong ví dụ là biến kiểu int gán giá trị cho biến kiểu object.
Unboxing là quá trình ngược lại với boxing, tức là đưa dữ liệu từ kiểu dữ liệu tham chiếu về kiểu dữ liệu giá trị.
- Unboxing được thực hiện tường minh và thông qua cách ép kiểu tường minh (đã được trình bày trong bài ÉP KIỂU TRONG C#).
- Phải chắc chắn rằng đối tượng cần boxing thuộc đúng kiểu dữ liệu đưa ra. Nếu không việc unboxing sẽ báo lỗi chương trình.
- Quá trình unboxing:
- Kiểm tra xem đối tượng cần un-boxing có thuộc đúng kiểu dữ liệu đưa ra hay không.
- Nếu đúng thì thực hiện copy giá trị của đối tượng sang biến dữ liệu kiểu giá trị. Ngược lại thì thông báo lỗi.
- Ví dụ:
int Value = 109;
// Boxing
object ObjectValue = Value;
/* thực hiện unboxing bằng cách:
* Kiểm tra dữ liệu biến ObjectValue thấy thuộc đúng kiểu int.
* Gán giá trị của biến ObjectValue vào biến NewValue bằng cách ép kiểu tường minh.
* Biến NewValue sẽ mang giá trị là 109*/
int NewValue = (int)ObjectValue;
Từ khóa var trong C#
var là từ khóa hỗ trợ khai báo biến mà không cần kiểu dữ liệu, kiểu dữ liệu sẽ được xác định khi gán giá trị cho biến, lúc đó chương trình sẽ tự ép kiểu cho biến.
Những lưu ý khi sử dụng từ khóa var:
- Bắt buộc phải gán giá trị ngay khi khởi tạo biến và không thể khởi tạo giá trị null cho biến var.
// Lỗi vì chưa khởi tạo giá trị cho biến varInt. var varInt; // Lỗi vì không được khởi tạo giá trị null cho biến varString. var varString = null; // Lỗi vì phải khởi tạo giá trị ngay khi khai báo var varLong; varLong = 109; // Khai báo đúng! var varBool = true;
- var chỉ là từ khóa dùng để khai báo biến không phải là một kiểu dữ liệu.
Khai báo biến bằng từ khóa var thường được ứng dụng trong:
- Duyệt mảng bằng foreach (sẽ trình bày trong bài FOREACH TRONG C# ).
- Truy vấn LinQ (sẽ trình bày trong bài LINQ TRONG C#).
Ví dụ minh họa sử dụng từ khóa var:
/* Vì biến StringVariable được khởi tạo giá trị kiểu chuỗi
* nên trình biên dịch sẽ hiểu biến này như là biến kiểu string.
*/
var varString = "MCTT";
// Khai báo tường minh biến kiểu string
string Content = "MCTT";
// In giá trị của biến StringVariable và biến Content
Console.WriteLine(varString);
Console.WriteLine(Content);
Kết luận
Nội dung bài này giúp các bạn nắm được:
- Khái niệm về kiểu dữ liệu object.
- Boxing và unboxing trong C#.
- Từ khóa var trong C#.
Bài học sau chúng ta sẽ cùng tìm hiểu một khái niệm tiếp theo đó là KIỂU DỮ LIỆU DYNAMIC TRONG C#