C # cung cấp ref
và out
từ khóa để làm cho các đối số được truyền bằng tham chiếu. Ngữ nghĩa của hai là rất giống nhau. Sự khác biệt duy nhất là trong việc khởi tạo biến flaged:
ref
yêu cầu biến phải được khởi tạo trước khi chuyển nó vào hàm,out
không.out
yêu cầu biến được khởi tạo bên trong hàm,ref
không.
Các trường hợp sử dụng của hai từ khóa này cũng gần như giống nhau và việc sử dụng quá thường xuyên của chúng là tôi tin rằng nó có mùi mã (mặc dù có các trường hợp sử dụng hợp lệ như TryParse
và TryGetValue
mẫu).
Bởi vì điều này ai đó có thể giải thích, tại sao có hai công cụ rất giống nhau trong C # cho các trường hợp sử dụng hẹp như vậy?
Ngoài ra, trên MSDN , có tuyên bố rằng họ có hành vi thời gian chạy khác nhau:
Mặc dù các từ khóa ref và out gây ra hành vi thời gian chạy khác nhau, chúng không được coi là một phần của chữ ký phương thức tại thời điểm biên dịch.
Hành vi thời gian chạy của họ khác nhau như thế nào?
Phần kết luận
Cả hai câu trả lời đều đúng, cảm ơn cả hai. Tôi chấp nhận jmoreno vì nó rõ ràng hơn.
ref
trong C ++; để trỏ đến con trỏ đối tượng (hoặc nguyên thủy) trong câu hỏi. tức làInt32.TryParse(myStr, out myInt)
(C #) được "thực thi" giống nhưint32_tryParse(myStr, &myInt)
(C); sự khác biệt duy nhất là một số ràng buộc được thực thi bởi trình biên dịch để ngăn ngừa lỗi. (Tôi sẽ không đăng bài này như một câu trả lời vì tôi có thể sai về cách thức hoạt động này đằng sau hậu trường, nhưng đây là cách tôi hình dung nó hoạt động [bởi vì nó làm cho tinh thần])