拿下面的代码:
private void anEvent(object sender, EventArgs e) {
//some code
}
Run Code Online (Sandbox Code Playgroud)
以下有什么区别?
[object].[event] += anEvent;
//and
[object].[event] += new EventHandler(anEvent);
Run Code Online (Sandbox Code Playgroud)
[UPDATE]
显然,两者之间没有区别......前者只是后者的语法糖.
我刚刚意识到我可以通过两种方式添加事件处理程序:
考虑像这样的事件处理程序:
private void MyEventHandler()
{}
Run Code Online (Sandbox Code Playgroud)
方法1:实例化新的委托
MyObject.MyEvent += new Action(MyEventHandler);
Run Code Online (Sandbox Code Playgroud)
方法2:添加事件处理程序而不实例化新委托
MyObject.MyEvent += MyEventHandler;
Run Code Online (Sandbox Code Playgroud)
应该考虑这两种实现之间有什么区别吗?
在MSDN 中关于 Invoke 的示例中,我在设置委托变量时发现了奇怪的表达式:
为什么他们使用创建新对象的语法:
myDelegate = new AddListItem(AddListItemMethod);
Run Code Online (Sandbox Code Playgroud)
而不是分配
myDelegate = AddListItemMethod;
Run Code Online (Sandbox Code Playgroud)
这些表达有什么区别?表达的意思是new AddListItem(...)什么?
全码:
public class MyFormControl : Form
{
public delegate void AddListItem();
public AddListItem myDelegate;
private Button myButton;
private Thread myThread;
private ListBox myListBox;
public MyFormControl()
{
myButton = new Button();
myListBox = new ListBox();
myButton.Location = new Point(72, 160);
myButton.Size = new Size(152, 32);
myButton.TabIndex = 1;
myButton.Text = "Add items in list box";
myButton.Click += new EventHandler(Button_Click);
myListBox.Location = new …Run Code Online (Sandbox Code Playgroud)