[c#] Lokale Variablen mit Delegaten


0 Answers

Ich nehme an, dass die Frage, die ich stelle, ist, wie funktioniert es mit einer lokalen Variable [MG edit: "Ack - ignoriere das ..." wurde später hinzugefügt]

Das ist der Punkt; es ist wirklich keine lokale Variable mehr - zumindest nicht in Bezug darauf, wie wir normalerweise von ihnen denken (auf dem Stack usw.). Es sieht wie eins aus, ist es aber nicht.

Und für Informationen, die nicht "gute Praxis" sind - anonyme Methoden und erfasste Variablen sind tatsächlich ein unglaublich mächtiges Werkzeug, besonders wenn man mit Ereignissen arbeitet. Fühlen Sie sich frei, sie zu benutzen, aber wenn Sie diesen Weg hinunter gehen, würde ich empfehlen, Jon's Buch aufzuheben, um sicherzustellen, dass Sie verstehen, was tatsächlich passiert.

Question

Dies scheint eindeutig nicht so zu sein, als wäre es keine Best Practice. Kann jemand erklären, warum es keine Best Practice wäre oder wie das funktioniert? Bücher oder Artikel, die eine Erklärung liefern, würden geschätzt.

//The constructor
public Page_Index() {

    //create a local value
    string currentValue = "This is the FIRST value";

    //use the local variable in a delegate that fires later
    this.Load += delegate(object sender, EventArgs e) {
        Response.Write(currentValue);
    };

    //change it again
    currentValue = "This is the MODIFIED value";

}

Der ausgegebene Wert ist der zweite Wert "Modified" . Welcher Teil der Compiler-Magie funktioniert? Ist das so einfach wie den Wert auf dem Heap zu verfolgen und später wieder abzurufen?

[Bearbeiten]: Einige der Kommentare gegeben, den ursprünglichen Satz ändern einige ...




Related