Ich bin neugierig zu wissen, ob ein Lambda (wenn als Delegat verwendet wird) eine neue Instanz jedes Mal erstellen wird, wenn es aufgerufen wird, oder ob der Compiler einen Weg findet, den Delegaten nur einmal instanziieren und übergeben.Erstellt ein Lambda bei jedem Aufruf eine neue Instanz?
Genauer gesagt, ich möchte eine API für ein XNA-Spiel erstellen, die ich ein Lambda verwenden kann, um in einem benutzerdefinierten Rückruf zurückgeben. Da dies in der Update-Methode (die viele Male pro Sekunde aufgerufen wird) aufgerufen wird, wäre es ziemlich schlecht, wenn es jedes Mal eine Instanz neu erzeugt, um den Delegaten weiterzuleiten.
InputManager.GamePads.ButtonPressed(Buttons.A, s => s.MoveToScreen<NextScreen>());
FYI, Sie können ildasm oder andere Dekompilationswerkzeuge verwenden, um den generierten Code zu betrachten. Wenn Sie dies tun, werden Sie feststellen, dass in diesem Fall der Delegat einmal generiert und in einem statischen Feld zwischengespeichert und dann jedes Mal erneut verwendet wird, wenn dieser Codepfad erreicht wird. Wenn das Lambda den Verweis "this" oder eine äußere Variable verwendet, hängt der Delegat von seiner Schließung ab und muss jedes Mal neu erstellt werden, wenn eine neue Abschlussumgebung benötigt wird. –