Wenn eine neue stark typisierte Ansicht in ASP.NET MVC Hinzufügen zeigen diese seltsamen Klassen nach oben:
alt text http://i39.tinypic.com/ixa1yh.jpg
Was sind sie?
Wenn eine neue stark typisierte Ansicht in ASP.NET MVC Hinzufügen zeigen diese seltsamen Klassen nach oben:
alt text http://i39.tinypic.com/ixa1yh.jpg
Was sind sie?
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.
Sneaky! Danke für eine gute Erklärung. :) – Kjensen