C# 클로저의 변수 캡처에 대한 자세한 설명
소개
변수 캡처는 클로저가 바깥쪽 범위 내에 정의된 변수에 액세스할 수 있도록 하는 C# 클로저의 기본 측면입니다. 이 기사에서는 변수 캡처에 대해 자세히 살펴보고 작동 방식, 값 유형과 참조 유형 캡처 및 박싱에 대한 특정 질문에 답합니다.
로컬 변수를 캡처하는 방법
변수 캡처는 람다 식이나 무명 메서드가 바깥쪽 범위에 있는 지역 변수에 액세스할 때 발생합니다. 그러나 정확한 포획 메커니즘은 명확하지 않습니다.
이를 이해하기 위해 간단한 예를 살펴보겠습니다.
<code class="language-csharp">Action action = () => { Console.WriteLine(counter); }; int counter = 5;</code>
이 예에서 람다 식은 바깥쪽 범위에서 counter
변수를 캡처합니다. 이를 달성하기 위해 컴파일러는 실제로 캡처된 변수에 대한 참조를 저장하는 클로저 클래스라는 익명 클래스를 만듭니다. 람다 표현식이 실행되면 클로저 클래스를 통해 캡처된 변수에 액세스합니다.
<code class="language-csharp">class ClosureClass { private int counter; public ClosureClass(int counter) { this.counter = counter; } public void Execute() { Console.WriteLine(counter); } }</code>
이 경우 클로저 클래스는 counter
변수에 대한 참조를 저장하고 이에 액세스할 수 있는 메서드를 제공합니다.
값 유형 및 참조 유형
캡처된 변수의 유형에 따라 클로저 클래스에 저장되는 방식이 결정됩니다.
포장
값 유형을 캡처할 때 권투는 포함되지 않습니다. 캡처된 값은 클로저 클래스에 직접 저장되며 캡처된 값에 영향을 주지 않고 원래 변수를 수정할 수 있습니다.
위 내용은 C# 클로저에서 변수 캡처는 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!