Sự rắc rối ở đây là bởi vì không giống như con trỏ (như trong *), "ref" trong C# không phải là một phần của một loại, mà là một phần của chữ ký phương thức. Nó áp dụng cho tham số và có nghĩa là "điều này không được sao chép". Nó không có nghĩa là "đối số này có kiểu tham chiếu".
Thông số được chuyển bởi ref, thay vì đại diện cho vị trí lưu trữ mới, thay vào đó là bí danh cho một số vị trí hiện tại. Cách tạo bí danh về mặt kỹ thuật là chi tiết thực hiện. Hầu hết các bí danh thường được triển khai dưới dạng tham chiếu được quản lý, nhưng không phải lúc nào cũng được. Trong một số trường hợp liên quan đến async, ví dụ, một tham chiếu đến một phần tử mảng có thể được biểu diễn bên trong như một sự kết hợp của mảng và chỉ mục.
Về cơ bản cho tất cả các mục đích, a và b của bạn vẫn được C# hiểu là biến được nhập int. Nó là hợp pháp và hoàn toàn bình thường khi sử dụng chúng trong bất kỳ biểu thức nào có giá trị int như a + b, hoặc SomeMethod (a, b) và trong những trường hợp đó giá trị int thực được lưu trữ trong a và b được sử dụng.
Thực sự không có khái niệm về "tham chiếu" như một thực thể mà bạn có thể trực tiếp làm việc với C#. Không giống như con trỏ, giá trị thực tế của tham chiếu được quản lý phải được giả định là có thể thay đổi bất kỳ lúc nào hoặc thậm chí không đồng bộ, theo GC, do đó tập hợp các kịch bản có ý nghĩa về tham chiếu được quản lý sẽ rất hạn chế.
vì các tham chiếu không giống với các loại giá trị. –
Công cụ sửa đổi 'ref' không làm đối số tương ứng được đóng hộp thành kiểu tham chiếu. – Lee
Bạn đang cố gắng xem liệu hai tham số có phải là tham chiếu đến cùng một biến không? – BoltClock