정적 익명 함수
메모
이 문서는 기능 사양입니다. 사양은 기능의 디자인 문서 역할을 합니다. 여기에는 기능 디자인 및 개발 중에 필요한 정보와 함께 제안된 사양 변경 내용이 포함됩니다. 이러한 문서는 제안된 사양 변경이 완료되고 현재 ECMA 사양에 통합될 때까지 게시됩니다.
기능 사양과 완료된 구현 간에 약간의 불일치가 있을 수 있습니다. 그러한 차이는 관련 언어 디자인 모임(LDM) 노트에 기록됩니다.
사양문서에서 특징 사양서를 C# 언어 표준으로 채택하는 과정에 대해 자세히 알아볼 수 있습니다.
챔피언 이슈: https://github.com/dotnet/csharplang/issues/275
요약
람다 및 익명 메서드에서 '정적' 한정자를 허용합니다. 이 경우 지역 또는 인스턴스 상태의 캡처가 범위를 포함할 수 없습니다.
동기
의도치 않게 바깥 컨텍스트에서 상태를 캡처하지 마십시오. 이렇게 하면 캡처된 개체가 예기치 않게 보존되거나 추가로 할당되는 상황이 발생할 수 있습니다.
상세 디자인
람다 또는 무명 메서드에는 static
한정자가 있을 수 있습니다.
static
한정자는 람다 또는 무명 메서드가 정적 익명 함수임을 나타냅니다.
정적 익명 함수는 이를 둘러싼 범위에서 상태를 캡처할 수 없습니다.
따라서 바깥쪽 범위의 로컬, 매개변수 및 this
는 정적 익명 함수내에서 사용할 수 없습니다.
정적 익명 함수 암시적 또는 명시적 this
또는 base
참조에서 인스턴스 멤버를 참조할 수 없습니다.
정적 익명 함수 바깥쪽 범위의 static
멤버를 참조할 수 있습니다.
정적 익명 함수는 바깥쪽 범위의 constant
정의를 참조할 수 있습니다.
정적 익명 함수 내의 nameof()
은 포함된 범위에서 로컬, 매개 변수, 또는 this
이나 base
을 참조할 수 있습니다.
바깥쪽 범위의 private
멤버에 대한 접근성 규칙은 static
및 비static
익명 함수에 대해 동일합니다.
정적 익명 함수 정의가 메타데이터에서 static
메서드로 내보내지는지는 보장되지 않습니다. 컴파일러 구현에 최적화를 맡겨져 있습니다.
static
로컬 함수 또는 익명 함수는 감싸고 있는 정적 익명 함수 의 상태를 포착할 수 있지만, 감싸고 있는 정적 익명 함수외부의 상태는 포착할 수 없습니다.
유효한 프로그램의 익명 함수에서 static
한정자를 제거해도 프로그램의 의미는 변경되지 않습니다.
C# feature specifications