通过转换委托向事件添加方法?

时间:2013-10-22 17:15:54

标签: c#

我来自Java背景,目前正在学习c#。

我理解当一个人想要为一个事件订阅一个方法时,就像下面这样做:

button.Click += HandleClick;

void HandleClick (object sender, EventArgs e) {
   button.Text = string.Format (count++ + " clicks!"); 
}

然而,似乎可以像下面这样写出:

button.Click += delegate {button.Text = string.Format (count++ + " clicks!");};

我们是否将该方法投射给代表?我以为该活动想要一个方法来订阅它?到底是什么东西?

2 个答案:

答案 0 :(得分:2)

  

我们是否将该方法强制转换为委托?

嗯,你没有投射 - 但你正在使用方法组转换将方法名称转换为委托。

  

我认为该事件需要一个方法来订阅它?

不,事件需要委托订阅(或取消订阅)。您可以使用您提供的代码或更明确地使用方法创建一个委托实例

button.Click += new EventHandler(HandleClick);

甚至将两者分开:

EventHandler handler = HandleClick; // Method group conversion
button.Click += handler;            // Event subscription

...或者您可以从匿名函数(匿名方法或lambda表达式)创建委托实例。

有关详细信息,请参阅我的article on delegates and events

答案 1 :(得分:0)

delegate关键字正在创建一个新的匿名方法。然后(隐式)创建一个委托,该委托引用该匿名方法,并将该委托添加为该事件的委托之一。