为什么要使用事件呢?举个简单的例子,比如说你的界面上有个bottom按钮,然后你写了一个点击一下这个按钮就弹出一个消息窗口的代码,然而你要弹出消息窗口的这个事,开发控件的人并不知道,所以开发者预先定义好了这个事件,他并不关心你点击这个按钮要干什么,但是按钮却通过点击事件调用了你的代码。
其实事件说简单点:就像委托一样,只是他多了一个约束,这个约束就是当XXX达到了某个时刻(某个点),然后就触发了XXX事情;
还不理解,没关系,看个小例子;大家平时都喜欢关注微博吧,就拿这个做个例子吧,可能不是很好,凑合着看看吧;
粉丝(Fans)关注了大V(bigV),相当于订阅了一个事件
大V发了一条微博,相当于产生了一个事件
在这个事件中Fans收到了大V的微博,下面是具体代码
这是微博的内容,即事件的一个参数
public class MicroBlogEventArgs : EventArgs { private DateTime sendDateTime; public DateTime SendDateTime { get { return this.sendDateTime; } } private string author; public string Author { get { return this.author; } } private string context; public string Context { get { return this.context; } } public MicroBlogEventArgs(DateTime createDateTime, string author, string context) { this.sendDateTime = createDateTime; this.author = author; this.context = context; } }
这是大V对象,大V定义了事件
public class BigV { private string name; public BigV(string name) { this.name = name; } public event EventHandler<MicroBlogEventArgs> SendMicroBlog; /// <summary> /// 由大V产生一个事件(即大V发了一条微博) /// </summary> /// <param name="e"></param> public void OnSendMicroBlog(MicroBlogEventArgs e) { System.Threading.Interlocked.CompareExchange(ref SendMicroBlog, null, null); if (SendMicroBlog!=null) { SendMicroBlog(this, e); } } public void SimulateSendMicroBlog(DateTime dt,string context) { MicroBlogEventArgs e = new MicroBlogEventArgs(dt, this.name, context); OnSendMicroBlog(e); } }
下面这个就是Fans了,fans只要关注(订阅)大V,就可以看到大V的微博了
public class Fans { public Fans( BigV bigV) { bigV.SendMicroBlog += new EventHandler<MicroBlogEventArgs>(bigV_SendMicroBlog); } void bigV_SendMicroBlog(object sender, MicroBlogEventArgs e) { Console.WriteLine("{0},{1}发了:{2}", e.SendDateTime, e.Author, e.Context); } }
下面就是模拟,大V发微博,然后关注他的fans就能收到他的微博了
class Program { static void Main(string[] args) { BigV bigV = new BigV("zhangsan"); Fans fans = new Fans(bigV); bigV.SimulateSendMicroBlog(DateTime.Now, "NO ZUO NO DIE"); Console.ReadKey(); } }
其实大家都知道事件是怎么一回事,只是拿代码来表示的时候就感觉怎么也写不出来,所以大家不妨在网上多找几个例子练练,今天就到此吧
时间: 2024-10-12 16:25:50