[c#] 이벤트 처리기에 람다 식 사용

현재 다음과 같이 선언 된 페이지가 있습니다.

public partial class MyPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //snip
        MyButton.Click += (o, i) =>
        {
            //snip
        }
    }
}

최근에야 1.1에서 .NET 3.5로 이동했기 때문에 Page_Load 외부에서 이벤트 처리기를 작성하는 데 익숙합니다. 내 질문은; 이를 위해 람다 메서드를 사용할 때주의해야 할 성능 단점이나 함정이 있습니까? 확실히 더 간결하기 때문에 선호하지만 사용하기 위해 성능을 희생하고 싶지는 않습니다. 감사.



답변

컴파일러가 람다 식을 동등한 대리자로 변환하므로 성능에 영향을주지 않습니다. Lambda 표현식은 컴파일러가 작업하는 데 익숙한 것과 똑같은 코드로 번역하는 언어 기능에 지나지 않습니다.

컴파일러는 가지고있는 코드를 다음과 같이 변환합니다.

public partial class MyPage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //snip
        MyButton.Click += new EventHandler(delegate (Object o, EventArgs a)
        {
            //snip
        });
    }
}


답변

성능면에서는 명명 된 메서드와 동일합니다. 큰 문제는 다음을 수행 할 때입니다.

MyButton.Click -= (o, i) =>
{
    //snip 
} 

아마도 다른 람다를 제거하고 원래는 그대로 두려고 할 것입니다. 그래서 교훈은 핸들러를 제거 할 수 있기를 원하지 않는 한 괜찮다는 것입니다.


답변

EventHandler handler = (s, e) => MessageBox.Show("Woho");

button.Click += handler;
button.Click -= handler;


답변

“구문 적 설탕”을 알고 있고 델리게이트 구문 등을 사용하는 것과 동일한 것으로 컴파일하는 한, 내가 알고 있거나 경험 해본 성능 관련 문제는 없습니다.


답변