Freigeben über


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.