Используя лямбда-выражения для обработчиков событий

У меня в настоящее время есть страница, которая объявляется следующим образом:

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

Я только недавно переместился в.NET 3.5 от 1,1, таким образом, я привык писать обработчики событий за пределами Page_Load. Мой вопрос; есть ли какие-либо недостатки производительности или ловушки, которые я должен не упустить при использовании метода лямбды для этого? Я предпочитаю его, поскольку это, конечно, более кратко, но я не хочу жертвовать производительностью для использования его.Спасибо.

101
задан CJBS 10 February 2016 в 19:58
поделиться

3 ответа

Нет никаких последствий для производительности, поскольку компилятор преобразует ваше лямбда-выражение в эквивалентный делегат. Лямбда-выражения - это не что иное, как языковая функция, которую компилятор переводит в тот же самый код, с которым вы привыкли работать.

Компилятор преобразует код, который у вас есть, примерно так:

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
        });
    }
}
101
ответ дан 24 November 2019 в 04:40
поделиться

По производительности это то же самое, что и именованный метод. Большая проблема возникает, когда вы делаете следующее:

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

Он, вероятно, попытается удалить другую лямбду, оставив там исходную. Итак, урок состоит в том, что это нормально, если вы также не хотите удалить обработчик.

58
ответ дан 24 November 2019 в 04:40
поделиться

Никаких последствий для производительности, о которых я знаю или когда-либо сталкивался, насколько я знаю, это просто "синтаксический сахар" и компилируется до того же уровня, что и использование синтаксиса делегата и т. Д.

{{1} }
2
ответ дан 24 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: