C#-创建一个可以接受任意数量参数的EventHandler [英] C# - Create an EventHandler that can take any number of parameters

查看:66
本文介绍了C#-创建一个可以接受任意数量参数的EventHandler的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望创建一个自定义EventHandler,该事件处理程序可以将任意数量的对象作为其参数,并且事先不知道获取的对象.

I wish to create a custom EventHandler that can have any number of objects as its parameters and the objects it gets isn't known in advance.

我知道我可以将它传递给Object [],但是我想要的类似于

I know I can pass it an Object[] but what I would like is something similar to

MyEventHandler someCustomEvent(Object obj1, Object obj2, Object obj3)

其中对象的数量可以为0或10(如果需要).

where the number of objects can be 0 or 10 if needed.

感谢我的评论和回答,

public class FinishedEventArgs : EventArgs {
            public Object[] Args{ get; set; }
        }

protected void OnFinished(params Object[] args) {
            if(this.Finished != null) {
                this.Finished(this, new FinishedEventArgs() {
                    Args = args
                });
            }
        }

看起来可以接受吗?

推荐答案

EventHandler仅仅是一个委托.

您可以这样创建委托:

public delegate void Foo(params object[] args);

事件:

public event Foo Bar;

您最终将发生以下触发事件:

You will end up with firing event like this:

Bar(1, "");

但是,正如@Kent Boogaart所说,您应该使用EventHandler<TEventArgs>创建事件,因此更好的方法是创建类:

But, as @Kent Boogaart said, you should create events using EventHandler<TEventArgs>, so better approach would be creating class:

public class MyEventArgs : EventArgs
{
    public MyEventArgs(params object[] args)
    {
        Args = args;
    }

    public object[] Args { get; set; }
}

事件:

public event EventHandler<MyEventArgs> Bar2;

所以您将触发以下事件:

So you will fire event like this:

Bar2(this, new MyEventArgs(1, ""));

这篇关于C#-创建一个可以接受任意数量参数的EventHandler的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆