(λ²ˆμ—­) 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개의 μ’‹μ•„μš”