C# 什么';隐式注册事件处理程序的好处是什么

C# 什么';隐式注册事件处理程序的好处是什么,c#,C#,将活动注册为以下内容有什么好处: void MyMethod() { button1.Click += delegate (object sender, EventArgs e) { .. } } 与之相比: void MyMethod() { button1.Click += new System.EventHandler(this.button1_Click); } void button1_Click(object sender, Eve

将活动注册为以下内容有什么好处:

void MyMethod()
{
    button1.Click += delegate (object sender, EventArgs e)
    {
        ..
    }
}
与之相比:

void MyMethod()
{
    button1.Click += new System.EventHandler(this.button1_Click);
}

void button1_Click(object sender, EventArgs e)
{
    ..
}

更新:
取消订阅怎么样?

这只是关于编码风格

值得一提的是,像第一种情况那样声明它可以让您避免“意大利面代码”,并以更自然(人类可读的方式)将局部变量(如果需要)注入处理函数

更清楚地说。通过像第一种情况那样书写,您可以:

int x = 0; 

System.Windows.Forms.Button button = new System.Windows.Forms.Button(); 
button.Click += (o,e)=> {   
++x; 
};
在事件处理程序内部,您可以访问为处理程序方法的作用域声明的局部变量。对大多数人来说,这似乎是“自然的”,但如果你像一个开发人员那样思考,这应该是不可能的


祝你好运。

这只是关于编码风格

值得一提的是,像第一种情况那样声明它可以让您避免“意大利面代码”,并以更自然(人类可读的方式)将局部变量(如果需要)注入处理函数

更清楚地说。通过像第一种情况那样书写,您可以:

int x = 0; 

System.Windows.Forms.Button button = new System.Windows.Forms.Button(); 
button.Click += (o,e)=> {   
++x; 
};
在事件处理程序内部,您可以访问为处理程序方法的作用域声明的局部变量。对大多数人来说,这似乎是“自然的”,但如果你像一个开发人员那样思考,这应该是不可能的


祝你好运。

好处是你不必说出名字和在班上的位置

对于与注册事件的代码紧密耦合的light函数,短版本更方便

请注意,您还可以将
委托
交换为
=>

button1.Click += (object sender, EventArgs e) =>   
{
    ..
}

这样做的好处是,你不必在课堂上说出名字和位置

对于与注册事件的代码紧密耦合的light函数,短版本更方便

请注意,您还可以将
委托
交换为
=>

button1.Click += (object sender, EventArgs e) =>   
{
    ..
}

你可以更简洁:

button1.Click += ( sender, e ) =>
{
};
从语法上讲,它更干净(只要它不会导致长代码块,最好将其分解为命名方法)

内联声明是一个闭包,它允许您访问与匿名方法相邻的变量

发件人:

从本质上讲,闭包是一个代码块,可以在同一时间执行 后来,但它保持了它最初所在的环境 创建-即它仍然可以使用方法的局部变量等 它创建了它,即使在该方法完成执行之后


另请参见:

您可以更加简洁:

button1.Click += ( sender, e ) =>
{
};
从语法上讲,它更干净(只要它不会导致长代码块,最好将其分解为命名方法)

内联声明是一个闭包,它允许您访问与匿名方法相邻的变量

发件人:

从本质上讲,闭包是一个代码块,可以在同一时间执行 后来,但它保持了它最初所在的环境 创建-即它仍然可以使用方法的局部变量等 它创建了它,即使在该方法完成执行之后


另请参见:

向匿名委托或lambda注册事件处理程序时,可以编写较短的代码并使用闭包但是您无法取消订阅事件,如果事件处理程序代码太长,您的代码将变得丑陋。

向匿名委托或lambda注册事件处理程序时,您可以编写较短的代码并使用闭包但是您无法取消订阅事件,如果事件处理程序代码太长,您的代码会变得丑陋。

那么取消注册如何?如果必须取消注册(大多数处理程序不需要),那么这就是使用命名方法的一个很好的理由。如果必须取消注册,那么取消注册如何(大多数处理程序不需要)那么这就是使用命名方法的一个很好的理由。