더북(TheBook)

무엇을 반환할 수 있고 무엇을 반환할 수 없는지에 대한 내용에 더하여 추가적인 제약 사항도 있다. 참조 반환은 비동기 메서드에서는 사용할 수 없고, 이터레이터 블록에서도 사용할 수 없다. 그리고 포인터 타입과 마찬가지로 타입 인수 내에서는 ref 한정자를 사용할 수 없다. 하지만 인터페이스나 델리게이트 선언 시에는 여전히 ref 한정자를 사용할 수 있다. 즉, Func<ref int>라고는 쓸 수 없지만, 다음과 같이 코드를 쓸 수 있다.

delegate ref int RefFuncInt32();

참조 반환을 반드시 참조 지역 변수와 함께 사용해야 하는 것은 아니다. 그리고 참조 반환을 통해 반환되는 결과에 대해 단일한 연산을 바로 사용할 수 있다. 다음 예제는 13-6과 동일한 코드이지만 참조 지역 변수를 사용하지 않았다.

예제 13-7 참조 반환을 통해 반환된 결과에 증가 연산을 바로 사용 ▶ RefReturnSimpleNoLocal.cs

static void Main()
{
    int x = 10;
    RefReturn(ref x)++;  ----- 반환된 변수의 값을 바로 증가시킴
    Console.WriteLine(x);
}

static ref int RefReturn(ref int p)
{
    return ref p;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.