Ich habe derzeit eine Seite, die wie folgt deklariert ist:
public partial class MyPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//snip
MyButton.Click += (o, i) =>
{
//snip
}
}
}
Ich bin erst kürzlich von 1.1 auf .NET 3.5 umgestiegen, daher bin ich es gewohnt, Ereignishandler außerhalb von Page Load zu schreiben. Meine Frage ist; Gibt es Leistungsnachteile oder Fallstricke, auf die ich bei der Verwendung der Lambda-Methode achten sollte? Ich bevorzuge es, da es sicherlich prägnanter ist, aber ich möchte die Leistung nicht opfern, um es zu verwenden. Vielen Dank.
quelle
OnInit
Methode anzuhängen. Da jedoch dasClick
Ereignis einer Schaltfläche nach dem Laden der Seite ausgelöst wird, ist dieses Beispiel in Ordnung.In Bezug auf die Leistung entspricht dies einer benannten Methode. Das große Problem ist, wenn Sie Folgendes tun:
Es wird wahrscheinlich versuchen, ein anderes Lambda zu entfernen, wobei das ursprüngliche dort verbleibt. Die Lektion lautet also, dass es in Ordnung ist, wenn Sie nicht auch den Handler entfernen möchten.
quelle
-=
anderen anonymen Funktion aufheben (verwenden ), die ebenfalls einen leeren Körper hat, ist im Wesentlichen undefiniert, welcher der beiden Ereignishandler dies tut entfernt werden, oder ob einer von ihnen überhaupt entfernt wird?var event = (o, e) => doSomething(); handler += event; doSomethingElse(); handler -= event;
quelle
c# EventHandler handler = null; handler = (s, e) => { MessageBox.Show("Woho"); button.Click -= handler;}
Keine Auswirkungen auf die Leistung, die mir bekannt sind oder denen ich jemals begegnet bin, soweit ich weiß, dass es sich nur um "syntaktischen Zucker" handelt und der sich auf das Gleiche wie die Verwendung der Delegatensyntax usw. reduziert.
quelle