相关疑难解决方法(0)

C#:'+ = anEvent'和'+ = new EventHandler(anEvent)'之间的区别

拿下面的代码:

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]

显然,两者之间没有区别......前者只是后者的语法糖.

c# delegates event-handling

74
推荐指数
3
解决办法
1万
查看次数

我应该实例化一个新的代表吗?

我刚刚意识到我可以通过两种方式添加事件处理程序:

考虑像这样的事件处理程序:

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)

应该考虑这两种实现之间有什么区别吗?

.net c# delegates event-handling

6
推荐指数
1
解决办法
1318
查看次数

分配与创建新委托

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)

c#

1
推荐指数
1
解决办法
94
查看次数

标签 统计

c# ×3

delegates ×2

event-handling ×2

.net ×1