定义了一个代理,一个事件参数类,四个事件都使用这个代理和参数类,四个事件使用参数类中不同的属性,如何根据参数类的构造函数(重载了四次)让四个事件只能访问自己相关的属性呢?

解决方案 »

  1.   

    自定义事件类继承EventArgs
    定义4个构造函数。
    然后在调用的时候参数各不相同就可以了
    exp:public class MyEventArgs : EventArgs
        {
            private int age;
            private string name;
            private bool sex;        public MyEventArgs (int age)
            {
                this.age=age;
            }
            public MyEventArgs (string name)
            {this.name=name;}        public MyEventArgs (bool sex)
            {this.sex=sex;}
                   public int Age
            {  get{return this.age;}}
            public string Name
            {
                get { return this.name; }
            }
            public bool Sex
            {  get{return this.sex;} }    }
    //你在访问的时候直接用不用的参数,
    //委托定义为
       public delegate void MyEventHandler(object sender, MyEventArgs e);
    //事件定义为
    public event MyEventHandler MyChanged;//定义一个ColorChanged事件        protected virtual void MyChanged(MyEventArgs e)
            {//事件触发方法
                if (MyChanged!= null)
                {//判断事件是否为空
                    MyChanged(this, e);//触发事件
                }
            }//使用应该会的吧
     int i=1;string a="test"; bool flag=false;
     MyChanged(new MyEventArgs(i));
     MyChanged(new MyEventArgs(a));
     MyChanged(new MyEventArgs(flag));
      

  2.   

    我现在就是这样做的,但是i,a,flag对三个事件都是可见的,
    想做成对应i这个事件那么a,flag这两个属性就不可见,比如
    e.i就行了,没有e.a和e.flag,这样行吗?
      

  3.   

    就是一楼那样了 protected virtual void MyChanged(MyEventArgs e)
            {//事件触发方法
                if (MyChanged!= null)
                {//判断事件是否为空
                    MyChanged(this, e);//触发事件
                }
            }//使用应该会的吧
     int i=1;string a="test"; bool flag=false;
     MyChanged(new MyEventArgs(i));
     MyChanged(new MyEventArgs(a));
     MyChanged(new MyEventArgs(flag));