csharplang/proposals/static-lambdas.md
2020-06-24 14:00:36 -07:00

1.3 KiB

Static lambdas

Summary

Support lambdas that disallow capturing state from the enclosing scope.

Motivation

Avoid unintentionally capturing state from the enclosing context.

Detailed design

A lambdas with static cannot capture state from the enclosing scope. As a result, locals, parameters, and this from the enclosing scope are not available within a static lambda.

A static lambda cannot reference instance members from an implicit or explicit this or base reference.

A static lambda may reference static members from the enclosing scope.

A static lambda may reference constant definitions from the enclosing scope.

nameof() in a static lambda may reference locals, parameters, or this or base from the enclosing scope.

Accessibility rules for private members in the enclosing scope are the same for static and non-static lambdas.

No guarantee is made as to whether a static lambda definition is emitted as a static method in metadata. This is left up to the compiler implementation to optimize.

A non-static local function or lambda can capture state from an enclosing static lambda but cannot capture state outside the enclosing static lambda.

Removing the static modifier from a lambda in a valid program does not change the meaning of the program.