out(C# 참조)
업데이트: 2007년 11월
out 키워드는 인수를 참조로 전달하는 데 사용됩니다. 이는 ref 키워드와 비슷하지만 ref의 경우 변수를 전달하기 전에 초기화해야 한다는 점에서 차이가 있습니다. out 매개 변수를 사용하려면 메서드 정의와 호출하는 메서드에서 모두 out 키워드를 명시적으로 사용해야 합니다. 예를 들면 다음과 같습니다.
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
out 인수로 전달되는 변수는 이를 전달하기 전에 초기화할 필요가 없지만 호출하는 메서드는 메서드 반환 이전에 값을 할당해야 합니다.
ref 및 out 키워드는 런타임에 서로 다르게 취급되지만 컴파일 타임에는 동일하게 취급됩니다. 따라서 한 메서드는 ref 인수를 사용하고 다른 메서드는 out 인수를 사용하는 경우 메서드를 오버로드할 수 없습니다. 예를 들어 이러한 두 메서드는 컴파일할 때 동일하게 간주되므로 다음과 같은 코드는 컴파일되지 않습니다.
class CS0663_Example
{
// Compiler error CS0663: "Cannot define overloaded
// methods that differ only on ref and out".
public void SampleMethod(out int i) { }
public void SampleMethod(ref int i) { }
}
그러나 한 메서드가 ref 또는 out 인수를 사용하고 다른 메서드는 두 인수 중 어느 것도 사용하지 않는 경우 다음과 같이 오버로드할 수 있습니다.
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
속성은 변수가 아니므로 out 매개 변수로 전달할 수 없습니다.
배열 전달에 대한 자세한 내용은 ref 및 out을 사용하여 배열 전달(C# 프로그래밍 가이드)을 참조하십시오.
예제
메서드에서 값을 여러 개 반환해야 하는 경우 out 메서드를 선언하는 것이 좋습니다. out 매개 변수를 사용하는 메서드에서는 변수에 반환 형식으로 액세스할 수 있을 뿐만 아니라(return 참조) 호출하는 메서드에 한 개 이상의 개체를 out 매개 변수로 반환할 수도 있습니다. 다음 예제에서는 out을 사용하여 한 번의 메서드 호출로 변수 세 개를 반환합니다. 세 번째 인수에는 null이 할당됩니다. 이렇게 하면 메서드에서 값을 선택적으로 반환할 수 있습니다.
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
C# 언어 사양
자세한 내용은 C# 언어 사양의 다음 단원을 참조하십시오.
5.1.6 출력 매개 변수
10.6.1.3 출력 매개 변수