발신자의 경우 :
방법 :
그래서:
int x;
Foo(ref x); // Invalid: x isn't definitely assigned
Bar(out x); // Valid even though x isn't definitely assigned
Console.WriteLine(x); // Valid - x is now definitely assigned
...
public void Foo(ref int y)
{
Console.WriteLine(y); // Valid
// No need to assign value to y
}
public void Bar(out int y)
{
Console.WriteLine(y); // Invalid: y isn't definitely assigned
if (someCondition)
{
// Invalid - must assign value to y before returning
return;
}
else if (someOtherCondition)
{
// Valid - don't need to assign value to y if we're throwing
throw new Exception();
}
else
{
y = 10;
// Valid - we can return once we've definitely assigned to y
return;
}
}
그것을 보는 가장 간결한 방법 :
ref = inout
아웃 = 아웃
Ref 및 Out 매개 변수 전달 모드는 메소드가 호출자가 전달한 변수를 변경하는 데 사용됩니다. 심판과 심판의 차이는 미묘하지만 중요합니다. 각 매개 변수 전달 모드는 약간 다른 프로그래밍 시나리오에 적용되도록 설계되었습니다. out과 ref 매개 변수 사이의 중요한 차이점은 각각에 의해 사용되는 명확한 할당 규칙입니다.
out 매개 변수를 사용하는 메서드 호출자는 호출 전에 out 매개 변수로 전달 된 변수에 할당 할 필요가 없습니다. 그러나 호출 수신자는 반환하기 전에 out 매개 변수에 할당해야합니다.
출처:MSDN
Alex가 언급 한 MSDN 기사에서,
out 매개 변수를 사용하는 메서드 호출자는 호출 전에 out 매개 변수로 전달 된 변수에 할당 할 필요가 없습니다. 그러나 호출 수신자는 반환하기 전에 out 매개 변수에 할당해야합니다.
반대로 ref 매개 변수는 호출 수신자가 처음에 할당 한 것으로 간주됩니다. 따라서 호출 수신자는 사용하기 전에 ref 매개 변수에 할당 할 필요가 없습니다.
요약하면, 메소드 내에서 ref 매개 변수를 설정할 수 있지만 매개 변수는 제외한다고 간주 할 수 있습니다.이를 설정해야합니다. 방법 밖에서도 똑같이 행동해야합니다.