在.NET中订阅事件时,我需要创建一个新的委托实例,例如
toolbarControl1.OnUploadEventHandler +=
new ToolbarControl.UploadEventHandler(toolbarControl1_OnUpload);
或者做以下事情会更好吗?
toolbarControl1.OnUploadEventHandler += toolbarControl1_OnUpload;
提前致谢。
答案 0 :(得分:9)
第二个采用较少的编码,两者的意思相同。
您可能需要考虑使用EventHandler的通用版本 - EventHandler<TEventArgs>
。您将保存声明所有这些代表。
您也可以使用lambda表达式,即
toolbarControl1.OnUploadEventHandler +=
(sender, args) => { /* Your code goes here */ };
答案 1 :(得分:2)
你可以做到这两点,所以你的偏好。
对于非常简单的处理程序,您也可以执行此类操作来保存编写委托函数:
toolbarControl1.OnUploadEventHandler += (s, e) => uploadCount +=1;
答案 2 :(得分:1)
代码说明了一切:
using System;
class Program
{
void SomeMethod(object sender, EventArgs e) { }
event EventHandler SomeEvent;
static void Main(string[] args)
{
var prog = new Program();
// Demonstrate that they are equivalent
prog.SomeEvent += new EventHandler(prog.SomeMethod);
prog.SomeEvent -= prog.SomeMethod; // Sugar for new EventHandler(prog.SomeMethod)
Console.WriteLine("Number of SomeEvent subscribers is {0}", (prog.SomeEvent != null ? prog.SomeEvent.GetInvocationList() : new Delegate[0]).Length);
// Why are they equivalent?
var d1 = new EventHandler(prog.SomeMethod);
var d2 = new EventHandler(prog.SomeMethod);
Console.WriteLine("Delegates are reference equal {0}", Object.ReferenceEquals(d1, d2));
Console.WriteLine("Delegates are equivalent {0}", d1 == d2);
}
}
答案 3 :(得分:0)
它们是等价的。第二个只提供更好的可读性。
答案 4 :(得分:0)
除非您需要保留对代理人的引用以取消订阅,否则它们是等效的。