将附加参数传递给System.Action,C#

时间:2011-09-05 12:33:58

标签: c# delegates action

好吧,我在库中有一个按钮,如下所示:

    public class Button  {
       public event Action<UIButtonX> onClicked;
       //
       // when button clicked, on OnClicked method is called
       //
       protected virtual void OnClicked () {
            if (onClicked != null) onClicked (this);
       }
    }

当我想处理按钮点击时,我写的是:

button.onClicked += delegate{
  //do something
}

button.onClicked += HandleButtonClick;

void HandleButtonClick(UIButton obj){
}

现在我想将参数传递给匿名委托,比如

button.onClicked += delegate(UIButton obj, int id) {
 //do something with id
}

但编译器不允许这样做。如何处理这个问题?

感谢。

2 个答案:

答案 0 :(得分:3)

看看你需要做的事情:

public class Button
{
    public event Action<UIButtonX, int> onClicked;

    public int Id { get; set; }

    protected virtual void OnClicked ()
    {
        var e = this.onClicked;
        if (e != null)
        {
            e(this, this.Id);
        }
    }
}

然后你可以添加你的处理程序:

button.onClicked += (button, id) => { /* code here */ }

答案 1 :(得分:1)

我认为最好使用事件而不是行动,请考虑阅读以下类似的一些问题:event Action<> vs event EventHandler<>C# Action/Delegate Style Question

以下文章对于理解这些方法之间的差异非常有帮助: http://blog.monstuff.com/archives/000040.html

希望它对你有用。