
·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 关于EventHandler的使用
也就是委托和事件的使用。使用过,但了解的不够深入,现在逐渐来填以前留下的坑吧。
EventHandler, EventHandler<TEventArg> 是.net Framework内部定义的两个委托.
从定义来看 ,后者是以泛型的形式来接收参数TEventArgs,可以是继承于EventArgs 的子类;
// 摘要:
// 表示将处理不包含事件数据的事件的方法。
//
// 参数:
// sender:
// 事件源。
//
// e:
// 不包含任何事件数据的 System.EventArgs。
[Serializable]
[ComVisible(true)]
public delegate void EventHandler(object sender, EventArgs e);
// 摘要:
// 表示将处理事件的方法。
//
// 参数:
// sender:
// 事件源。
//
// e:
// 一个包含事件数据的 System.EventArgs。
//
// 类型参数:
// TEventArgs:
// 由该事件生成的事件数据的类型。
[Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
默认的System.EventArgs不包含参数,但我们可以通过继承在子类中添加我们需要的数据。
public class MyEventArgs : EventArgs
{
public string message
{
get;
set;
}
public MyEventArgs(string mess)
{
message = mess;
}
}
上例中:类MyEventArgs继承于System.EventArgs,同时也定义了一个string类型的message属性,用于接收数据。
现在在具体事例来使用 MyEventArgs类
public class DoTest
{
public DoTest() { }
//定义事件
public event EventHandler<MyEventArgs> DoWork;
public void Begin(string val)
{
if (DoWork != null)
{
MyEventArgs e = new MyEventArgs(val);
DoWork(this, e);
}
}
}
class PRogram
{
static void Main(string[] args)
{
DoTest dos = new DoTest();
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就可得到传入的参数。