Freigeben über


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