Lokale Variablen, die mit den Delegierten

Diese ist eindeutig nicht erscheint, wie es wäre nicht die beste Praxis. Kann mir jemand erklären, warum wäre es nicht ein best-practice-oder wie das funktioniert? Keine Bücher oder Artikel, die eine Erklärung wäre willkommen.

//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";

}

Den Wert, der ausgegeben wird, ist der zweite Wert "Modifiziert". Was ein Teil der compiler-Magie ist macht diese Arbeit? Ist dies so einfach wie die Verfolgung der Wert auf dem heap und abrufen zu einem späteren Zeitpunkt wieder?

[Edit]: Da einige der Kommentare, die änderung des ursprünglichen Satzes einige...

  • Es ist nichts falsch mit, dass die Praxis. Es ist nur mehr fortgeschrittene als Anfänger verstehen würde.
  • Abgeordnete; in der Tat, es kann für sehr saubere und elegante design - aber Sie müssen verstehen, die Auswirkungen.
  • Das ist wirklich sehr interessant. Ich hätte nicht gedacht, dass messing mit lokalen Variablen, die im Rahmen der Delegierte zugewiesen wurde, wäre eine gute Praxis, aber Sie lernen etwas neues die ganze Zeit.
  • Es hängt vom Szenario ab; in den meisten Fällen wäre es eine viel bessere Idee, um eine zweite variable, der Gültigkeitsbereich fest und ändert sich nie - aber es gibt ein paar Anwendungsfälle für aktualisierte Variablen erfasst, Aber in der Tat: behandeln Sie Sie als nur Lesen, bis es einen guten Grund, und Sie haben deutlich weniger Schmerzen.
  • Das ist der Unterschied zwischen einem Delegierten und einem Verschluss. Was Sie hier gemacht haben, ist ein Verschluss. Sie sind äußerst mächtig, und die Tatsache, dass wir Verschlüsse in .NET ist ein großes plus, nicht ein minus.
InformationsquelleAutor Hugoware | 2008-09-29
Schreibe einen Kommentar