Khi gọi phương thức có tham số, có 3 cách truyền:
1. Value Parameters (Truyền giá trị) - Mặc định
Sao chép giá trị thực vào tham số hình thức. Thay đổi trong method không ảnh hưởng đối số gốc. Tạo vị trí lưu trữ mới.
Ví dụ Value Parameter (Swap thất bại):
using System;
namespace CalculatorApplication
{
class NumberManipulator
{
public void Swap(int x, int y) // Không có ref
{
int temp = x; x = y; y = temp;
}
static void Main(string[] args)
{
NumberManipulator n = new NumberManipulator();
int a = 7, b = 10;
Console.WriteLine("Before swap, a={0}, b={1}", a, b); // 7, 10
n.Swap(a, b);
Console.WriteLine("After swap, a={0}, b={1}", a, b); // Vẫn 7, 10
Console.ReadLine();
}
}
}
Kết quả
Before swap, a=7, b=10
After swap, a=7, b=10
2. Reference Parameters (Truyền tham chiếu) - ref
Sao chép địa chỉ bộ nhớ. Thay đổi trong method ảnh hưởng đối số gốc. Dùng ref ở cả khai báo và gọi.
3. Output Parameters (Tham số đầu ra) - out
Tương tự ref nhưng: không cần khởi tạo trước khi truyền, bắt buộc gán giá trị trong method trước khi trả về. Dùng để trả về nhiều giá trị.
Ví dụ out:
public void Divide(int a, int b, out int result, out int remainder)
{
result = a / b;
remainder = a % b;
}
// Gọi: Divide(10, 3, out int q, out int r); // q=3, r=1
Tóm tắt: Mặc định = value. Dùng ref khi cần sửa đổi đối số. Dùng out khi method trả về nhiều giá trị. C# 7.2+ có in (readonly reference).