Attribute in lokalen Funktionen
Hinweis
Dieser Artikel ist eine Feature-Spezifikation. Die Spezifikation dient als Designdokument für das Feature. Es enthält vorgeschlagene Spezifikationsänderungen sowie Informationen, die während des Entwurfs und der Entwicklung des Features erforderlich sind. Diese Artikel werden veröffentlicht, bis die vorgeschlagenen Spezifikationsänderungen abgeschlossen und in die aktuelle ECMA-Spezifikation aufgenommen werden.
Es kann einige Abweichungen zwischen der Feature-Spezifikation und der abgeschlossenen Implementierung geben. Diese Unterschiede werden in den entsprechenden Hinweisen zum Language Design Meeting (LDM) erfasst.
Weitere Informationen zum Prozess für die Aufnahme von Funktions-Speclets in den C#-Sprachstandard finden Sie im Artikel zu den Spezifikationen.
Champion Issue: https://github.com/dotnet/csharplang/issues/1888
Attribute
Lokale Funktionsdeklarationen dürfen jetzt Attribute haben (§22). Parametern und Typparametern lokaler Funktionen wird ebenfalls die Möglichkeit geboten, Attribute zu haben.
Attribute, die eine bestimmte Bedeutung haben, wenn sie auf eine Methode, ihre Parameter oder ihre Typparameter angewendet werden, haben dieselbe Bedeutung, wenn sie auf eine lokale Funktion, ihre Parameter bzw. ihre Typparameter angewendet werden.
Eine lokale Funktion kann ähnlich wie bei einer bedingten Methode (§22.5.3) bedingt gemacht werden, indem sie mit einer [ConditionalAttribute]
versehen wird. Eine bedingte lokale Funktion muss ebenfalls static
sein. Alle Einschränkungen für bedingte Methoden gelten auch für lokale bedingte Funktionen, einschließlich der Anforderung, dass der Rückgabetyp void
sein muss.
Extern
Der extern
-Modifizierer ist jetzt für lokale Funktionen zulässig. Dadurch wird die lokale Funktion extern im gleichen Sinne wie eine externe Methode (§15.6.8).
Ähnlich wie bei einer externen Methode muss der lokalen Funktionstext einer externen lokalen Funktion ein Semikolon sein. Ein Semikolon lokalen Funktionstext ist nur für eine externe lokale Funktion zulässig.
Eine externe lokale Funktion muss auch static
sein.
Syntax
Die §13.6.4 oder Grammatik der lokalen Funktionen wird wie folgt geändert:
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