Đề XuấT, 2024

Editor Choice

Sự khác biệt giữa Quyền anh và Bỏ hộp trong C #

Trong C #, tất cả các loại giá trị được lấy từ đối tượng lớp. Vì vậy, một biến tham chiếu của đối tượng loại có thể tham chiếu đến bất kỳ loại giá trị nào khác. C # giới thiệu hai phương thức cho Boxing và Unboxing, liên kết loại giá trị với loại tham chiếu. Sự khác biệt cơ bản giữa Boxing và Unboxing là Boxing là việc chuyển đổi loại giá trị thành loại đối tượng trong khi đó, mặt khác, thuật ngữ Unboxing dùng để chuyển đổi loại đối tượng thành loại giá trị. Hãy để chúng tôi nghiên cứu sự khác biệt khác giữa Boxing và Unboxing.

Biểu đồ so sánh

Cơ sở để so sánhquyền anhBỏ hộp
Căn bảnLoại đối tượng đề cập đến loại giá trị.quá trình lấy giá trị từ đối tượng được đóng hộp.
Lưu trữGiá trị được lưu trữ trên ngăn xếp được sao chép vào đối tượng được lưu trữ trên bộ nhớ heap.Giá trị của đối tượng được lưu trữ trên bộ nhớ heap được sao chép vào loại giá trị được lưu trữ trên ngăn xếp.
Chuyển đổiChuyển đổi ngầm định.Chuyển đổi rõ ràng.
Thí dụint n = 24;
đối tượng ob = n;
int m = (int) ob;

Định nghĩa về quyền anh

Quyền anh là một thủ tục chuyển đổi một loại giá trị thành một loại đối tượng. Ở đây, loại giá trị được lưu trữ trên ngăn xếp và loại đối tượng được lưu trữ trong bộ nhớ heap. Chuyển đổi loại giá trị này sang loại đối tượng là một chuyển đổi ngầm định. Bạn có thể trực tiếp gán giá trị cho một đối tượng và C # sẽ xử lý chuyển đổi phần còn lại. Hãy hiểu Boxing với một ví dụ.

 int i = 24; đối tượng ob = i; // Đóng hộp số nguyên n vào loại đối tượng ob. hoặc đối tượng ob1 = 21; // ở đây cũng có một loại đối tượng ob1 đề cập đến một kiểu số nguyên 

Trong đoạn mã trên, kiểu số nguyên i chứa giá trị 24 được lưu trữ trên ngăn xếp và được sao chép vào loại đối tượng ob. Một loại đối tượng hiện đang đề cập đến một giá trị số nguyên. Bây giờ, các int int int và cũng chứa giá trị 24 và loại đối tượng của ob ob cũng chứa giá trị 24, nhưng cả hai giá trị này độc lập với nhau, tức là nếu bạn thay đổi giá trị của i, nó sẽ không phản ánh sự thay đổi trong giá trị của ob.

Quyền anh tiêu tốn thêm bộ nhớ cùng với thời gian thêm. Lý do là một đối tượng mới, sẽ tham chiếu đến loại giá trị, phải phân bổ không gian bộ nhớ trên heap. Tiếp theo, giá trị của loại giá trị được lưu trữ trên ngăn xếp sẽ được chuyển sang ob loại đối tượng, trên vị trí bộ nhớ heap.

Định nghĩa của Unboxing

Mặt trái của Boxing là Unboxing. Unboxing là một chuyển đổi của loại đối tượng thành loại giá trị. Trong Unboxing, giá trị của loại đối tượng được đóng hộp được lưu trữ trên heap được chuyển sang loại giá trị được lưu trữ trên ngăn xếp. Không giống như Boxing, việc Unboxing phải được thực hiện một cách rõ ràng. Loại đối tượng được truyền rõ ràng thành loại giá trị và loại giá trị phải giống với giá trị mà loại đối tượng đang đề cập đến. Hãy hiểu khái niệm về Unboxing với một ví dụ.

 int i = 24; đối tượng ob = i; // Đóng hộp số nguyên n vào loại đối tượng ob. int j = (int) ob; // Bỏ hộp giá trị số nguyên được lưu trong loại đối tượng ob thành kiểu nguyên y. 

Giá trị được lưu trữ trong đối tượng ob được lấy bằng cách chuyển nó thành kiểu giống như đối tượng được tham chiếu tức là kiểu số nguyên j j.

Unboxing cũng tiêu tốn nhiều bộ nhớ hơn và nhiều thời gian hơn. Vì, khi một loại đối tượng phải được bỏ hộp thì giá trị của loại đối tượng được lưu trữ trên heap phải được chuyển sang loại giá trị mới được lưu trữ trên ngăn xếp. Loại đối tượng có giá trị đã được truy xuất sẽ có sẵn để thu gom rác.

Sự khác biệt chính giữa Boxing và Unboxing

  1. Trong quyền anh, một đối tượng được tạo ra để gọi là một loại giá trị. Mặt khác, quá trình lấy lại giá trị từ đối tượng được đóng hộp được gọi là unboxing.
  2. Một loại giá trị được lưu trữ trên ngăn xếp được sao chép vào đối tượng được lưu trữ trên bộ nhớ heap. Mặt khác, trong unboxing, một đối tượng được lưu trữ trên bộ nhớ heap được sao chép sang một loại giá trị được lưu trữ trên bộ nhớ stack.
  3. Quyền anh là một chuyển đổi ngầm trong khi đó, unboxing là một chuyển đổi rõ ràng.

Phần kết luận:

Cả quyền anh và unboxing đều tiêu tốn nhiều thời gian và bộ nhớ hơn, và chúng đắt tiền về mặt tính toán. Họ cũng thiếu loại an toàn và tăng chi phí thời gian chạy. Luôn luôn khuyến cáo tránh sử dụng quá nhiều quyền anh và unboxing trong chương trình.

Top