Mọi kiểu dữ liệu, dựng sẵn hay do người dùng định nghĩa, đều được lấy từ một lớp cơ bản là System.Object. Do đó việc đóng gói những kiểu căn bản hay nguyên thủy vào trong class Object được gọi là boxing, và thao tác ngược lại được gọi là unboxing.
1. Boxing
Bạn có thể dễ dàng hình dung quá trình này thông qua tên gọi của nó, nghĩa là một giá trị được đưavào bên trong một đối tượng. Nói cách khác, boxing là những xử lý cho phép kiểu dữ liệu giá trị như
(int, unint, long…) được sử dụng như kiểu tham chiếu ( các đối tượng). Và quá trình boxing được thực hiện ngầm định. Bạn hãy xem hình dưới minh họa về quá trình boxing một số nguyên:
Đây là chương trình minh họa quá trình trên.
using System;
class Boxing
{
public static void Main()
{
int i = 123;
object o = i;
Console.WriteLine("The
object value = {0}", o);
Console.ReadLine();
}
}
2.Unboxing
Unboxing là quá trình ngược lại với boxing, tức là đưa từ một đối tượng ra một giá trị . Quá trình
này sẽ được thực hiện một cách tường minh. Và để thực hiện được điều này bạn cần chắc chắn rằng
đối tượng đã được boxing đúng kiểu giá trị đưa ra và sao chép giá trị từ thể hiện hay đối tượng vào
biến kiểu giá trị. Hình dưới đây mô tả quá trình unboxing. Như bạn thấy nó ngược lại với quá trình
boxing ở trên.
Đây là chương trình minh họa cả quá trình boxing và unboxing:
using System;
public class Unboxing
{
public static void Main()
{
int i = 123;
// Boxing
object o = i;
// Unboxing phải được thực hiện tường minh tường minh
int k = (int) o;
Console.WriteLine("k:
{0}", k);
}
}
Đối với Unboxing các kiểu giá trị thành công trong thời gian chạy. Các item đang được mở gói (unboxed) phải là một tham chiếu đến một đối tượng mà trước đây được tạo ra bởi boxing (một phiên bản của kiểu tham trị). Cố gắng unbox null là nguyên nhân của một NullReferenceException. Cố gắng unbox một tham chiếu đến một giá trị không tương thích gây ra một InvalidCastException.
Nhận xét
Đăng nhận xét