C#에서 값 형식을 참조로 전달려면 ref 또는 out 키워드 중 하나로 지정해주어야 합니다. 두 키워드의 차이는 매겨 변수 초기화에 있습니다.
ref 매개 변수는 사용하기 전에 초기화되어야 합니다. out 매개 변수는 명시적으로 초기화할 필요가 없고 이전의 값은 모두 무시합니다. 메서드가 실행되는 동안 할당해야 합니다.
호출되는 메서드에서 매개 변수로 사용되는 변수의 값을 영구적으로 변경하려면 값 형식 매개 변수에 ref 키워드를 지정합니다. 이 변수에 대한 참조 자체가 전달되게 됩니다.
이후에 참조에 대해 메서드가 실행되고 메서드가 실행되는 동안 매개 변수의 변경 내용이 메서드에 대한 매개 변수로 사용되는 변수에 적용됩니다.
class Program
{
private static void Add(int i, ref int result)
{
result += i;
return;
}
static void Main()
{
int total = 20;
Console.WriteLine("Total : {0}", total);
Add(10, ref total);
Console.WriteLine("Total : {0}", total);
}
}
Total : 20
Total : 30
ref와 비슷한 효과를 가집니다. out을 사용하여 선언된 매개 변수의 수정 내용을 메서드 외부에서도 확인할 수 있습니다.
out 매개 변수의 모든 초기 값은 메서드 내에서는 무시됩니다. out 매개 변수는 메서드가 실행되는 동안 할당되야 합니다.
class Program
{
private static void Add(int i, int j, out int result)
{
result = i + j;
return;
}
static void Main()
{
int total = 20;
Console.WriteLine("Total : {0}", total);
Add(10, 7, out total);
Console.WriteLine("Total : {0}", total);
}
}
Total : 20
Total : 17
ref는 기존 변수를 메서드에서 수정할 때 사용하고, out은 메서드 내에서 생성된 값을 반환할 때 사용하게 됩니다.