首页 > 代码库 > C#事件浅入

C#事件浅入

    为什么要使用事件呢?举个简单的例子,比如说你的界面上有个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();
    }
}

其实大家都知道事件是怎么一回事,只是拿代码来表示的时候就感觉怎么也写不出来,所以大家不妨在网上多找几个例子练练,今天就到此吧