Tham số tham chiếu (reference parameter) là tham chiếu đến vị trí bộ nhớ của một biến. Khi truyền bằng tham chiếu, không tạo vị trí bộ nhớ mới cho các tham số này. Chúng đại diện cho cùng vị trí bộ nhớ với đối số thực tế.
Ví dụ
using System;
namespace CalculatorApplication
{
class NumberManipulator
{
// Dùng ref cho cả hai tham số
public void Swap(ref int x, ref int y)
{
int temp;
temp = x;
x = y;
y = temp;
}
static void Main(string[] args)
{
NumberManipulator n = new NumberManipulator();
int a = 100;
int b = 200;
Console.WriteLine("Trước hoán đổi, a = {0}", a);
Console.WriteLine("Trước hoán đổi, b = {0}", b);
// Phải dùng ref khi gọi
n.Swap(ref a, ref b);
Console.WriteLine("Sau hoán đổi, a = {0}", a);
Console.WriteLine("Sau hoán đổi, b = {0}", b);
Console.ReadLine();
}
}
}
Kết quả
Trước hoán đổi, a = 100 Trước hoán đổi, b = 200 Sau hoán đổi, a = 200 Sau hoán đổi, b = 100
Từ khóa ref vs out
| Đặc điểm | ref | out |
|---|---|---|
| Khởi tạo trước khi gọi | Bắt buộc | Không bắt buộc |
| Gán giá trị trong method | Tùy chọn | Bắt buộc trước khi return |
| Mục đích | Đọc & ghi | Chỉ ghi (output) |
Ví dụ out
bool TryParseInt(string s, out int result)
{
return Int32.TryParse(s, out result);
}
// Gọi
int value;
if (TryParseInt("123", out value))
Console.WriteLine(value); // 123
C# 7+: out variable inline
if (int.TryParse("456", out int value))
Console.WriteLine(value);