Lambda (델리게이트로 사용되는 경우)가 호출 될 때마다 새 인스턴스를 만들지, 또는 컴파일러가 델리게이트를 한 번만 인스턴스화하고 해당 인스턴스를 전달할 수 있는지 여부에 대해 궁금합니다.lambda는 호출 될 때마다 새 인스턴스를 생성합니까?
더 구체적으로 말하면 사용자 지정 콜백을 전달하기 위해 람다 (lambda)를 사용할 수있는 XNA 게임용 API를 만들고 싶습니다. 이 메서드는 초당 여러 번 호출되는 Update 메서드에서 호출되므로 대리자를 전달할 때마다 매번 인스턴스를 새로 작성하면 상당히 나 빠질 수 있습니다. 때 수
InputManager.GamePads.ButtonPressed(Buttons.A, s => s.MoveToScreen<NextScreen>());
참고로, ildasm 또는 다른 디 컴파일 도구를 사용하여 생성 된 코드를 볼 수 있습니다. 그렇게하면 위임은 한 번 생성되어 정적 필드에 캐시 된 다음이 코드 경로에 도달 할 때마다 다시 사용된다는 것을 알 수 있습니다. lambda가 "this"참조 또는 외부 변수를 사용하면 대리자는 해당 closure에 종속되므로 새 closure 환경이 필요할 때마다 다시 만들어야합니다. –