GOOGLE ADS

Donnerstag, 14. April 2022

Was sind „Closures“ in .NET?

Was ist eine Schließung? Haben wir sie in.NET?

Wenn sie in.NET vorhanden sind, könnten Sie bitte einen Codeausschnitt (vorzugsweise in C#) bereitstellen, der dies erklärt?


Lösung des Problems

Ich habe einen Artikel zu genau diesem Thema. (Es hat viele Beispiele.)

Im Wesentlichen ist eine Closure ein Codeblock, der zu einem späteren Zeitpunkt ausgeführt werden kann, aber die Umgebung beibehält, in der er ursprünglich erstellt wurde – dh er kann auch danach immer noch die lokalen Variablen usw. der Methode verwenden, die ihn erstellt hat Methode hat die Ausführung beendet.

Das allgemeine Feature von Closures wird in C# durch anonyme Methoden und Lambda-Ausdrücke implementiert.

Hier ist ein Beispiel mit einer anonymen Methode:

using System;
class Test
{
static void Main()
{
Action action = CreateAction();
action();
action();
}
static Action CreateAction()
{
int counter = 0;
return delegate
{
// Yes, it could be done in one statement;
// but it is clearer like this.
counter++;
Console.WriteLine("counter={0}", counter);
};
}
}

Ausgabe:

counter=1
counter=2

Hier können wir sehen, dass die von CreateAction zurückgegebene Aktion immer noch Zugriff auf die Zählervariable hat und sie tatsächlich erhöhen kann, obwohl CreateAction selbst beendet ist.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...