csharplang/proposals/csharp-9.0/local-function-attributes.md
Bill Wagner a88d56e313
fix a number of broken links (#3750)
These were found building dotnet/docs#19736

- Add correct folders for several spec references.
- Correct casing of one anchor tag.
- Replace absolute links with relative links.
2020-07-30 14:39:47 -04:00

38 lines
1.7 KiB
Markdown

# Attributes on local functions
## Attributes
Local function declarations are now permitted to have [attributes](../../spec/attributes.md). Parameters and type parameters on local functions are also allowed to have attributes.
Attributes with a specified meaning when applied to a method, its parameters, or its type parameters will have the same meaning when applied to a local function, its parameters, or its type parameters, respectively.
A local function can be made conditional in the same sense as a [conditional method](../../spec/attributes.md#the-conditional-attribute) by decorating it with a `[ConditionalAttribute]`. A conditional local function must also be `static`. All restrictions on conditional methods also apply to conditional local functions, including that the return type must be `void`.
## Extern
The `extern` modifier is now permitted on local functions. This makes the local function external in the same sense as an [external method](../../spec/classes.md#external-methods).
Similarly to an external method, the *local-function-body* of an external local function must be a semicolon. A semicolon *local-function-body* is only permitted on an external local function.
An external local function must also be `static`.
## Syntax
The [local functions grammar](../csharp-7.0/local-functions.md#syntax-grammar) is modified as follows:
```
local-function-header
: attributes? local-function-modifiers? return-type identifier type-parameter-list?
( formal-parameter-list? ) type-parameter-constraints-clauses
;
local-function-modifiers
: (async | unsafe | static | extern)*
;
local-function-body
: block
| arrow-expression-body
| ';'
;
```