关于EventHandler的使用
也就是委托和事件的使用。使用过,但了解的不够深入,现在逐渐来填以前留下的坑吧。
EventHandler, EventHandler<TEventArg> 是.net Framework内部定义的两个委托.
从定义来看 ,后者是以泛型的形式来接收参数TEventArgs,可以是继承于EventArgs 的子类;
//摘要://表示将处理不包含事件数据的事件的方法。////参数://sender://事件源。////e://不包含任何事件数据的 System.EventArgs。[Serializable]
[ComVisible(true)]publicdelegatevoidEventHandler(objectsender, EventArgs e);//摘要://表示将处理事件的方法。////参数://sender://事件源。////e://一个包含事件数据的 System.EventArgs。////类型参数://TEventArgs://由该事件生成的事件数据的类型。[Serializable]publicdelegatevoidEventHandler<TEventArgs>(objectsender, TEventArgs e);
默认的System.EventArgs不包含参数,但我们可以通过继承在子类中添加我们需要的数据。
publicclassMyEventArgs : EventArgs
{publicstringmessage
{get;set;
}publicMyEventArgs(stringmess)
{
message=mess;
}
}
上例中:类MyEventArgs继承于System.EventArgs,同时也定义了一个string类型的message属性,用于接收数据。
现在在具体事例来使用 MyEventArgs类
publicclassDoTest
{publicDoTest() { }//定义事件publiceventEventHandler<MyEventArgs>DoWork;publicvoidBegin(stringval)
{if(DoWork !=null)
{
MyEventArgs e=newMyEventArgs(val);
DoWork(this, e);
}
}
}
classPRogram
{staticvoidMain(string[] args)
{
DoTest dos=newDoTest();
dos.DoWork+= (s, e) =>{
Console.WriteLine(e.message);
};
dos.Begin("1");
dos.Begin("2");
dos.Begin("3");
dos.Begin("4");
}
}
dos.DoWork 注册了匿名函数 ,功能是 输出显示 参数值message。
在调用Begin("1")函数,显示 1; 此时通过e.message就可得到传入的参数。