Атрибуты для локальных функций
Заметка
Эта статья является спецификацией компонентов. Спецификация служит проектным документом для функции. Она включает предлагаемые изменения спецификации, а также информацию, необходимую во время проектирования и разработки функции. Эти статьи публикуются до тех пор, пока предложенные изменения спецификации не будут завершены и включены в текущую спецификацию ECMA.
Может возникнуть некоторое несоответствие между спецификацией компонентов и завершенной реализацией. Эти различия фиксируются в соответствующих записи собрания по проектированию языка (LDM).
Дополнительные сведения о процессе внедрения спецификаций функций в стандарт языка C# см. в статье о спецификациях .
Проблема чемпиона: https://github.com/dotnet/csharplang/issues/1888
Атрибуты
Теперь объявления локальных функций разрешены иметь атрибуты (§22). Параметры и параметры типа для локальных функций также могут иметь атрибуты.
Атрибуты с заданным значением при применении к методу, его параметрам или параметрам типа будут иметь то же самое значение при применении к локальной функции, его параметрам или параметрам типа соответственно.
Локальная функция может быть сделана условной в том же смысле, что и условный метод (§22.5.3), с помощью декоратора [ConditionalAttribute]
. Условная локальная функция также должна быть static
. Все ограничения на условные методы также применяются к условным локальным функциям, включая то, что возвращаемый тип должен быть void
.
Стажёр
Модификатор extern
теперь разрешен для локальных функций. Это делает локальную функцию внешней в том же смысле, что и внешний метод (§15.6.8).
Аналогично внешнему методу, локальное тело-функции внешней локальной функции должно быть точкой с запятой. Точка с запятой локально-функции-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
| ';'
;
C# feature specifications