(번역) ref fields and scoped ref | Patrick Smacchia

C# 7.0 참조 로컬 및 참조 반환

@Patrick Smacchia 님이 작성하신 내용입니다.


C# 7.0은 ref키워드의 사용을 확장했습니다. 지역 변수는 관리되는 포인터가 될 수 있으며 아래 예제에 설명되어 있습니다.


using System.Diagnostics;
int i = 6;
ref int j = ref i;
j = 7;
Debug.Assert(i == 7);

또한 메서드는 관리되는 포인터를 반환할 수 있습니다.

ref int i = ref GetRef();

static ref int GetRef() {
   int[] arr = new int[6];
   return ref arr[2];
}

이 예는 사소하지 않습니다. 먼저 배열이 힙에 할당되고 배열 GetRef()을 빌드하는 메서드보다 오래 지속된다는 점에 주목하십시오.

따라서 요소 중 하나에 대한 내부 포인터를 반환하는 것이 좋습니다.

둘째, 반환된 내부 포인터는 배열의 유일한 GC 루트입니다. 그러나 내부 포인터에서 배열 참조를 얻을 수 있는 방법이 없기 때문에 메서드가 반환되면 배열 자체에 도달할 수 없게 됩니다!


아래에서 원본 글을 확인하실 수 있습니다.
읽어주셔서 감사합니다.

3개의 좋아요