out
contextual 키워드는 인터페이스와 델리게이트의 매개 변수 수정 자 또는 일반 유형 매개 변수 선언으로 두 가지 컨텍스트 (각각 세부 정보에 대한 링크 임)에서 사용할 수 있습니다 . 이 주제에서는 매개 변수 수정 자에 대해 설명하지만 일반 유형 매개 변수 선언에 대한 정보는이 다른 주제를 볼 수 있습니다.
out
키워드 원인 인자는 참조에 의해 전달된다. 변수를 전달하기 전에 초기화해야한다는 ref
점을 제외 하면 키워드 와 같습니다 ref
. out
매개 변수 를 사용하려면 메소드 정의와 호출 메소드 모두 out
키워드를 명시 적으로 사용해야합니다 . 예를 들면 다음과 같습니다. C #
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
. 예를 들어 다음 코드는 컴파일되지 않습니다. C #
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
인수를 사용하고 다른 방법 이 다음과 같이 사용하지 않으면 오버로드를 수행 할 수 있습니다 . C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
속성은 변수가 아니므로 out
매개 변수 로 전달할 수 없습니다 .
배열 전달에 대한 자세한 내용은 ref
및 out
(C # 프로그래밍 안내서)를 사용하여 배열 전달을 참조하십시오 .
다음과 같은 방법 에는 ref
및 out
키워드를 사용할 수 없습니다 .
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
예
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;
}
}
out
할당되기 전에 읽을 수 없습니다.ref
이 제한이 없습니다. 그게 있습니다.