2009-06-15 2 views

Antwort

5

Das sind Compiler-generierte Klassen, die closures behandeln. Sie sind nicht einzigartig für ASP.NET MVC.

verursacht Diese Klasse der Compiler eine dieser Klassen zu generieren:

public class Foo 
{ 
    private bool _bar = true; 

    public Func<bool> HelloClosure() 
    { 
    return() => _bar; 
    } 
} 

Wenn jemand außerhalb von Foo HelloClosure nennt sie eine Funktion zurück, die einen Link zurück zu dieser speziellen Foo-Instanz hat. Stellen Sie sich vor, wir führen diese Funktion nicht sofort aus und der GC kommt mit und sammelt Foo. Was passiert nun, wenn wir die Funktion ausführen?

var fooInstance = new Foo(); 
var func = fooInstance.HelloClosure(); 
fooInstance = null; 
GC.Collect(); 
// assuming fooInstance is collected 
var result = func.Invoke(); 

Diese automatisch generierte Klassen verwalten diese Abhängigkeiten zwischen Funktionen und Instanzen, so dass wir nicht in eine Situation wie diese erhalten.

+0

Sneaky! Danke für eine gute Erklärung. :) – Kjensen

Verwandte Themen