以前一直对C#中的事件理解不是全面,经常看到已经定义好的某个事件,但是一直都没有看到实现该事件的注册方法,一直不解,今天突然理解了是怎么一回事!下以是代码:
首先定义一个委托类:
/// <summary> /// 开始异步请求 /// </summary> /// <param name="url">请求地址</param> /// <param name="requestContent">请求内容</param> public delegate void AsyncBeginRequestHandler(string url, string requestContent);
接下来定义一个HandlerEventDemo类,代码如下:
public class HandlerEventDemo { /// <summary> /// 开始异步请求时事件 /// </summary> public event AsyncBeginRequestHandler OnAsyncBegin; /// <summary> /// 异步提交的方法 /// </summary> public void AsyncPost(string Url, string Content,string name) { if (OnAsyncBegin != null) { OnAsyncBegin(Url, Content); }
} }
经常我们会看到代码写到这里就完了,然后在项目里也找不到这个事件用法,于是就有一个疑问,为什么定义了这个事件,又在项目里没有运用到。
如果要在项目中用到的话就应用以下代码:
public class Test { protected void TestMethod(object sender, EventArgs e) { //将方法注册到事件上 OnAsyncBegin += new AsyncBeginRequestHandler(_Default_OnAsyncBegin); if (OnAsyncBegin != null) { OnAsyncBegin("测试", "请求内容!"); } } void _Default_OnAsyncBegin(string aaa, string requestContent) { //这里就是调用事件具体要实现的代码 throw new NotImplementedException(); } }
为什么在项目中没有调用自己定义的事件呢?我的理解是因为这个事件暂时在项目中不需要用到,所以就没有调用。那为什么还要定义呢?是这样的,如果项目遇到新需求的话,说不定就要用到,所以这个自定义事件是预留的。
如果还不理解的话,就控件来说吧,比如Button控件,Button控件有很多事件,然而我们一般只用OnClick事件,而其它事件很少用,那其它没有用的事件都是预留事件。现在理解了没有呢?好了,先就这样了。