Chuyển một loại giá trị theo tham chiếu gây ra vị trí trên ngăn xếp để vượt qua thay vì giá trị của chính nó. Không liên quan gì đến việc boxing và unboxing. Điều này làm cho suy nghĩ về cách ngăn xếp trông trong các cuộc gọi đệ quy khá dễ dàng, như mọi cuộc gọi duy nhất đề cập đến vị trí "giống nhau" trên ngăn xếp.
Tôi nghĩ rất nhiều rắc rối đến từ MSDN's paragraph on boxing and unboxing:
Boxing là tên được đặt cho quá trình theo đó một loại giá trị được chuyển thành một loại tài liệu tham khảo. Khi bạn tạo một biến, bạn đang tạo một biến tham chiếu trỏ đến một bản sao mới trên heap. Biến tham chiếu là một đối tượng, ...
Có thể gây nhầm lẫn bạn giữa hai điều khác nhau: 1) sự "chuyển đổi" như bạn sẽ, một loại giá trị để nói một đối tượng, đó là bởi định nghĩa một loại tài liệu tham khảo :
int a = 5;
object b = a; // boxed into a reference type
và 2) với sự ra đi của một loại giá trị tham số bằng cách tham khảo:
main(){
int a = 5;
doWork(ref a);
}
void doWork(ref int a)
{
a++;
}
Hai thứ khác nhau là gì.
Có thể thiếu kiến thức của tôi, nhưng cho phép có đi: chuyển một loại giá trị bởi ref khiến vị trí của nó trên ngăn xếp được truyền chứ không phải là giá trị của chính nó. Nó không có gì để làm với boxing và unboxing, đúng không? – Adimeus
Từ MSDN: "Không có quyền sở hữu loại giá trị khi nó được chuyển qua tham chiếu". –