传递额外的参数给系统.行动,c#
本文关键字:系统 行动 参数 | 更新日期: 2023-09-27 18:07:28
我在库中有一个按钮,看起来像这样:
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
}
但是编译器不允许这样做。如何处理这个问题?
谢谢。
看起来你需要做这样的事情:
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 */ }
我认为最好使用事件而不是操作,考虑阅读以下一些类似的问题:vs事件eventandler <>和c#动作/委托样式问题
下面的文章对理解这两种方法之间的差异很有帮助:http://blog.monstuff.com/archives/000040.html
希望对你有用。