Heim > Backend-Entwicklung > C++ > Wie funktioniert die Variablenerfassung in C#-Abschlüssen?

Wie funktioniert die Variablenerfassung in C#-Abschlüssen?

Susan Sarandon
Freigeben: 2025-01-12 21:16:44
Original
992 Leute haben es durchsucht

How Does Variable Capture Work in C# Closures?

Detaillierte Erläuterung der Variablenerfassung in C#-Abschlüssen

Einführung

Variablenerfassung ist ein grundlegender Aspekt in C#-Abschlüssen, der es einem Abschluss ermöglicht, auf Variablen zuzugreifen, die in seinem umschließenden Bereich definiert sind. Dieser Artikel befasst sich eingehend mit der Variablenerfassung und beantwortet spezifische Fragen zur Funktionsweise, zur Erfassung von Werttypen im Vergleich zu Referenztypen und zum Boxen.

Wie lokale Variablen erfasst werden

Variablenerfassung erfolgt, wenn ein Lambda-Ausdruck oder eine anonyme Methode auf eine lokale Variable in ihrem umschließenden Bereich zugreift. Der genaue Erfassungsmechanismus ist jedoch nicht klar.

Um dies zu verstehen, betrachten wir ein einfaches Beispiel:

<code class="language-csharp">Action action = () => { Console.WriteLine(counter); };
int counter = 5;</code>
Nach dem Login kopieren

In diesem Beispiel erfasst der Lambda-Ausdruck die Variable counter in ihrem umschließenden Bereich. Um dies zu erreichen, erstellt der Compiler tatsächlich eine anonyme Klasse, eine sogenannte Abschlussklasse, die einen Verweis auf die erfasste Variable speichert. Wenn der Lambda-Ausdruck ausgeführt wird, greift er über die Abschlussklasse auf die erfasste Variable zu:

<code class="language-csharp">class ClosureClass
{
    private int counter;

    public ClosureClass(int counter)
    {
        this.counter = counter;
    }

    public void Execute()
    {
        Console.WriteLine(counter);
    }
}</code>
Nach dem Login kopieren

In diesem Fall speichert die Abschlussklasse einen Verweis auf die Variable counter und stellt eine Methode für den Zugriff darauf bereit.

Werttypen und Referenztypen

Der Typ der erfassten Variablen bestimmt, wie sie in der Abschlussklasse gespeichert wird:

  • Werttyp: Der Wert selbst wird in der Abschlussklasse gespeichert. Es sind keine Ein- oder Auspackvorgänge erforderlich.
  • Referenztyp: Referenzen auf Objekte werden in Abschlussklassen gespeichert. Wenn das Objekt später geändert wird, spiegelt die erfasste Referenz diese Änderungen wider.

Verpacken

Bei der Erfassung von Werttypen ist kein Boxing erforderlich. Der erfasste Wert wird direkt in der Abschlussklasse gespeichert und die ursprüngliche Variable kann geändert werden, ohne dass sich dies auf den erfassten Wert auswirkt.

Das obige ist der detaillierte Inhalt vonWie funktioniert die Variablenerfassung in C#-Abschlüssen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage