本地函数的属性

注意

本文是特性规范。 此规范是功能的设计文档。 它包括建议的规范变更,以及功能设计和开发过程中所需的信息。 这些文章将持续发布,直至建议的规范变更最终确定并纳入当前的 ECMA 规范。

功能规范与已完成的实现之间可能存在一些差异。 这些差异记录在相关的语言设计会议 (LDM) 说明中。

可以在有关规范的文章中了解更多有关将功能规范子块纳入 C# 语言标准的过程。

支持者问题:https://github.com/dotnet/csharplang/issues/1888

特性

现在允许本地函数声明具有属性 (§22)。 本地函数上的参数和类型参数也可以具有属性。

应用于方法、方法参数或方法类型参数时具有指定含义的属性,在应用于本地函数、本地函数参数或本地函数类型参数时将分别具有相同的含义。

可以通过使用 修饰局部函数,使其具有与条件方法([ConditionalAttribute])相同的条件特性。 条件局部函数还必须为 static。 对条件方法的所有限制也适用于条件本地函数,包括返回类型必须是 void

Extern

本地函数现在允许使用 extern 修饰符。 这将本地函数视为外部函数,与外部方法(§15.6.8)具有相同的外部性。

与外部方法类似,外部局部函数的 local-function-body 必须是分号。 仅允许在外部本地函数上使用分号 local-function-body

外部本地函数还必须为 static

语法

§13.6.4本地函数语法的修改如下:

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
    | ';'
    ;