事件参数一定要是EventArgs e 吗?我写了一个事件,把EventArgs换成了 string e,然后调用事件,那个string e参数并且能传递过去,调试成功,谁能解释一下吗?
public delegate void TestHandler(object sender,string arg);public class Test
{
    public void ResponseString()
    {
        if (this.Response != null)
            this.Response(this, "ASPX");
    }
    public event TestHandler Response;
}
页面中随便一个Button的响应
protected void Button1_Click(object sender, EventArgs e)
    {
        Test t = new Test();
        t.Response += new TestHandler(myTest);
        t.ResponseString();    }

解决方案 »

  1.   

    当然不能把EventArgs换成了 string,你的例子是不能说明问题的,你的不是触发一个事件,而是方法调用,你传的是string,接收方当然也是 string e,当然没问题,但这不是一回事情
      

  2.   

    我写的那个怎么不是事件呢?
      public event TestHandler Response;然后给事件赋值
      t.Response += new TestHandler(myTest);
      

  3.   

    按照微软的说法,事件参数必须从eventargs继承,不知这个为何能调试通过,期待达人解释
      

  4.   

    网上找了一下 如果是自定义委托的话 可以不是EventArgs 是string int都可以
    不知道是不是这样呢?
      

  5.   

    一般情况下,如果一个delegate是用作事件的,那么大家都会用(object sender, EventArgs e)这样的参数列表,这是一种习惯。注意我这里区分“事件”和"event":前者表达的是一个概念,编程时的一种做法,也就是一个类内部产生的消息它希望提供一种方式让其他的类接收到;后者是一个C#关键字,用于将delegate封装为适合事件使用的方式,通过+=/-=来修改消息的订阅者。你自定义的delegate,喜欢怎样的参数列表都可以,没有人规定你怎么做,然后任何的delegate,你都可以用它来构造event。
      

  6.   

    谢谢 
    cat_hsfz(我的Blog在http://purl.oclc.org/NET/cathsfz)和我理解的一样 一般情况下 用EventArgs是一种规范 但是不是语法限制  不用这个完全可以争取执行
    用(object sender, EventArgs e)是为了统一起见 大家都可以这样调用事件希望我的理解是正确的
      

  7.   

    看来是这样,不过这样eventargs有点多余,定义自己的object不挺好,干嘛要从eventargs继承