前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#笔记:事件和观察者模式

C#笔记:事件和观察者模式

作者头像
超级大猪
发布2019-11-22 09:47:25
5200
发布2019-11-22 09:47:25
举报

利用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 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档