> 백엔드 개발 > C++ > C# 클로저에서 변수 캡처는 어떻게 작동합니까?

C# 클로저에서 변수 캡처는 어떻게 작동합니까?

Susan Sarandon
풀어 주다: 2025-01-12 21:16:44
원래의
996명이 탐색했습니다.

How Does Variable Capture Work in C# Closures?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿