Tại cốt lõi của cả hai ref
và out
cung cấp một cơ chế truyền địa chỉ của biến cho một phương thức để có thể cập nhật nó - gán cho ref
hoặc out
tham số cập nhật biến trong ngữ cảnh của trình gọi. Trường hợp chúng khác nhau là trong các đảm bảo: out
đảm bảo rằng biến sẽ được cập nhật, ref
không.
Từ phía bên kia của cuộc gọi có sự khác biệt tương tự. Một out
tham số cho phương thức của chúng tôi không được đảm bảo có chứa bất cứ điều gì hữu ích khi đến và phải được đặt thành một giá trị tại một số điểm, trong khi một ref
tham số có thể được coi là có giá trị và chúng tôi không cần phải làm gì cụ thể với nó.
Sự khác biệt này có tác động đến phân tích, tạo và tối ưu hóa mã, trong khi hầu như không rõ ràng đối với chúng ta hầu hết thời gian, có thể có một số ảnh hưởng đến cách các chương trình của chúng tôi kết thúc hoạt động. Trình tạo mã có thể trì hoãn phân bổ biến cho đến trước cuộc gọi ngay lập tức, trình tối ưu hóa có thể quyết định nó có thể sắp xếp lại một số hoạt động hiệu quả hơn dựa trên hợp đồng, v.v.
Về mặt sử dụng: như một quy tắc chung tôi sử dụng out
cho các tình huống mà tôi không quan tâm đến nội dung của biến khi nó đến dưới dạng tham số và ref
khi tôi thực hiện.