Erkunden von C#-Abschlüssen: Zugriff auf Variablen über einschließende Methoden
In der Programmierung bezieht sich ein „Abschluss“ auf eine Funktion, die den Zugriff auf Variablen aus ihrem umgebenden Bereich behält, selbst nachdem die Ausführung der umgebenden Funktion abgeschlossen ist. In C# wird dies häufig mithilfe anonymer Methoden oder Lambda-Ausdrücken implementiert. Das Hauptmerkmal ist die Fähigkeit des Abschlusses, sich Variablen aus seiner übergeordneten Methode zu „merken“.
Anschauliches C#-Beispiel:
Bedenken Sie dieses Code-Snippet:
<code class="language-csharp">public Person FindById(int id) { return this.Find(delegate(Person p) { return (p.Id == id); }); }</code>
Hier greift der anonyme Delegat in FindById
auf die id
-Variable zu, die in der FindById
-Methode deklariert wurde. Dies zeigt die Fähigkeit des Abschlusses, den Zugriff auf Variablen aus seinem umschließenden Bereich zu erfassen und aufrechtzuerhalten.
Weiteres Lernen:
Für einen tieferen Einblick in Schließungen konsultieren Sie Ressourcen wie die Schriften von Martin Fowler und Jon Skeet zu diesem Thema. Sie bieten ausführliche Erklärungen und Beispiele.
Nutzung der C# 6-Syntax:
C# 6 führte eine prägnantere Syntax für Abschlüsse mithilfe von Lambda-Ausdrücken ein:
<code class="language-csharp">public Person FindById(int id) { return this.Find(p => p.Id == id); }</code>
Dieser Lambda-Ausdruck erreicht die gleiche Funktionalität wie der anonyme Delegat im vorherigen Beispiel, jedoch mit verbesserter Lesbarkeit.
Äquivalente prägnante Syntax:
Das obige Beispiel kann mit dem Pfeilausdruck weiter vereinfacht werden:
<code class="language-csharp">public Person FindById(int id) => this.Find(p => p.Id == id);</code>
Dies zeigt eine kompaktere Möglichkeit, den Abschluss in C# zu definieren.
Das obige ist der detaillierte Inhalt vonWie greifen C#-Abschlüsse über ihre übergeordneten Methoden auf Variablen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!