C#笔记:事件和观察者模式 利用C#的默认EventHander 和委托,可以很方便的写出观察者模式的事件。所谓观察者模式,举例说明。有一个水壶,一个报警器(不是安装在水壶上的)。需求是:水烧到100度的时候,报警器报警。解决方案一:在报警器上设置一个探测器,每隔两秒钟检查一下水有没有100度。如果100度到了,就启动报警器。 解决方案二:在水壶上装一个发信器,到了100度的时候就发一条短信给报警器,报警器报警。 第一个方案,是很让人烦躁的。我们就来看看第二个方案。也就是所谓的观察者模式。利用C#,只要五个步骤就能实现。 /// <summary> /// 第一步,创建事件信息类,这个是事件的传入参数 /// </summary> public class TextEventArgs : EventArgs { private string strText; public string StrText { get { return strText; } // set { strText = value; } } public TextEventArgs(string inStrText) { this.strText = inStrText; } } 这个类中保存了需要传入事件的信息。/// <summary> /// 第二步 创建系统的EventHander 参数是刚创建的EventArgs类 用来做事件的处理。实质是一个LIST,保存了很多 /// EventArgs为传入值的实体(以函数表现)。调用它的时候,List中所有的函数都会被传入EventArgs并执行。 /// 这就达到了观察者模式的感觉 /// </summary> public event EventHandler<TextEventArgs> SettingTextEvent; /// <summary> /// 第三步 引发事件的过程,其实就是把EventArgs传入事件。这个没有也可以。 /// </summary> /// <param name="e"></param> public void OnSettingTextEvent(TextEventArgs e) { if (SettingTextEvent != null) { SettingTextEvent(this, e); } } 定义好事件和事件的调用方法,我们接下来就是绑定事件了。 /// <summary> /// 第四步,写一个函数,用来绑定到事件中去,传入值是EventArgs /// 并且执行相关的操作。其实,其它类的所以函数无论是否公有,都能想办法绑定到事件上 /// </summary> /// <param name="sender">发送者</param> /// <param name="e">参数</param> private void Alert(object sender, TextEventArgs e) { MessageBox.Show(e.StrText); } 注意这个被绑定的函数的传入值。/// <summary> /// 第五步 绑定事件到Event中。然后触发事件。被绑定的所有函数都会执行。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { //绑定到事件 this.SettingTextEvent += Alert; //new 出TextEventArgs 对它赋值 TextEventArgs tea = new TextEventArgs(this.textBox1.Text); //传入TextEventArgs,调用事件 OnSettingTextEvent(tea); this.Close(); }当 OnSettingTextEvent 执行的时候,绑定到SettingTextEvent中所有的函数都会执行。完毕。当然,被绑定的不一定是本类中的函数,也可能是外部类的其它方法。至于具体怎么绑定,那就看大伙的了。 来自 大脸猫 写于 2015-02-16 22:16 -- 更新于2020-10-19 13:06 -- 0 条评论