У меня в настоящее время есть страница, которая объявляется следующим образом:
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. Мой вопрос; есть ли какие-либо недостатки производительности или ловушки, которые я должен не упустить при использовании метода лямбды для этого? Я предпочитаю его, поскольку это, конечно, более кратко, но я не хочу жертвовать производительностью для использования его.Спасибо.
Нет никаких последствий для производительности, поскольку компилятор преобразует ваше лямбда-выражение в эквивалентный делегат. Лямбда-выражения - это не что иное, как языковая функция, которую компилятор переводит в тот же самый код, с которым вы привыкли работать.
Компилятор преобразует код, который у вас есть, примерно так:
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
}
Он, вероятно, попытается удалить другую лямбду, оставив там исходную. Итак, урок состоит в том, что это нормально, если вы также не хотите удалить обработчик.
Никаких последствий для производительности, о которых я знаю или когда-либо сталкивался, насколько я знаю, это просто "синтаксический сахар" и компилируется до того же уровня, что и использование синтаксиса делегата и т. Д.
{{1} }