Statische anonyme Funktionen
Anmerkung
Dieser Artikel ist eine Featurespezifikation. 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 Featurespezifikation und der abgeschlossenen Implementierung geben. Diese Unterschiede werden in den entsprechenden Hinweisen zum Language Design Meeting (LDM) erfasst.
Weitere Informationen zum Einführen von Featurespezifikationen in den C#-Sprachstandard finden Sie im Artikel zu den Spezifikationen.
Champion-Problem: https://github.com/dotnet/csharplang/issues/275
Zusammenfassung
Lassen Sie einen „statischen“ Modifizierer für Lambdas und anonyme Methoden zu. Dadurch wird das Erfassen von lokalen Variablen oder Instanzzuständen aus enthaltenden Bereichen unterbunden.
Motivation
Vermeiden Sie unbeabsichtigtes Erfassen des Zustands aus dem eingeschlossenen Kontext, was zu einer unerwarteten Aufbewahrung von erfassten Objekten oder unerwarteten zusätzlichen Zuordnungen führen kann.
Detailentwurf
Eine Lambda- oder anonyme Methode verfügt möglicherweise über einen static
Modifizierer. Der static
Modifizierer gibt an, dass die Lambda- oder anonyme Methode eine statische anonyme Funktionist.
Eine statische anonyme Funktion kann den Zustand nicht aus dem umschließenden Bereich erfassen.
Daher sind lokale Variablen, Parameter und this
aus dem einschließenden Bereich in einer statischen anonymen Funktion nicht verfügbar.
Eine statische anonyme Funktion kann keine Instanzmember von einem impliziten oder expliziten this
oder base
-Verweis referenzieren.
Eine statische anonyme Funktion kann auf static
-Member aus dem einschließenden Bereich verweisen.
Eine statische anonyme Funktion kann auf constant
-Definitionen aus dem einschließenden Bereich verweisen.
nameof()
in einer statischen anonymen Funktion kann auf lokale Variablen, Parameter oder this
oder base
aus dem einschließenden Bereich verweisen.
Zugriffsregeln für private
-Member im einschließenden Bereich sind für static
und nicht-static
anonyme Funktionen identisch.
Es wird keine Garantie dafür gewährt, ob eine statische anonyme Funktion Definition als static
Methode in Metadaten ausgegeben wird. Es bleibt der Compilerimplementierung überlassen, dies zu optimieren.
Eine nichtstatic
lokale Funktion oder anonyme Funktion kann den Zustand einer eingeschlossenen statischen anonymen Funktion erfassen, aber nicht den Zustand außerhalb der eingeschlossenen statischen anonymen Funktionerfassen.
Durch das Entfernen des static
Modifizierers aus einer anonymen Funktion in einem gültigen Programm wird die Bedeutung des Programms nicht geändert.
C# feature specifications