事件的好处~实现对修改的封闭,对扩展的开放!~续

简介:

本文章主要以上一篇文件的代码在写法上进行一个优化,更代码更精简,更能发挥.net 3.5为我们提供的已有功能,呵呵!

首先,为了只有返回值的委托来说,我们是不用再去定义它的,完成可以用.net提供的Func<T>这个委托来实现

 

同时,这个委托也支付多个输入参数的情况,和Func<>对应的一个委托叫Action<>,它没有返回值,可以由多个输入参数,下面是对Func<> 委托的使用实例,同样使用上一篇文章作为例子

 public class ReturnMessage
    {
        public static event Func<string> ReturnMsg;
        public static string OnReturnMsg()
        {
            if (ReturnMsg != null)
                return ReturnMsg();
            else
                return "默认字符";
        }
    }

我们看到了,代码比上一篇文章精简了一些,在订阅事件时,同样可以使用匿名方法来实现

 ReturnMessage.ReturnMsg += delegate() { return "OK"; }; //不要以为这样省内存空间,它只是代码上精简了,事实上系统为我们自动建立了一个方法

在触发时,和上一篇文件没有区别,在这里就不列举代码了。

再把Action<>委托的例子写上,代大家参考

public class ReturnMessage
    {
        /// <summary>
        /// 返回消息事件
        /// </summary>
        public static event Func<string> ReturnMsg;
        /// <summary>
        /// 重定向事件
        /// </summary>
        public static event Action RedirectUrl;

        /// <summary>
        /// 触发ReturnMsg事件
        /// </summary>
        /// <returns></returns>
        public static string OnReturnMsg()
        {
            if (ReturnMsg != null)
                return ReturnMsg();
            else
                return "默认字符";
        }
        /// <summary>
        /// 触发OnRedirectUrl事件
        /// </summary>
        public static void OnRedirectUrl()
        {
            if (RedirectUrl != null)
                RedirectUrl();
        }
    }

调用方法:

 ReturnMessage.RedirectUrl += delegate() { Console.WriteLine("去新浪吧"); };

触发方法:

ReturnMessage.OnRedirectUrl();

这样就是我满意的结果了,呵呵!自己可以根据业务要求去写重定义的页面地址,呵呵。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:事件的好处~实现对修改的封闭,对扩展的开放!~续,如需转载请自行联系原博主。

目录
相关文章
|
8月前
|
uml
开闭原则(对修改封闭,对扩展开放)
开闭原则(对修改封闭,对扩展开放)
85 0
|
5月前
|
缓存 前端开发 数据格式
构建前端防腐策略问题之保证组件层的代码不受到接口版本变化的问题如何解决
构建前端防腐策略问题之保证组件层的代码不受到接口版本变化的问题如何解决
|
6月前
|
容器
通用研发提效问题之区分女娲上下文中的共享字典和隔离字典,如何解决
通用研发提效问题之区分女娲上下文中的共享字典和隔离字典,如何解决
|
8月前
|
移动开发 小程序 API
【产品上新】openURL接口开放,实现在小程序与H5之间“反复横跳”
【产品上新】openURL接口开放,实现在小程序与H5之间“反复横跳”
130 1
|
设计模式 Java
JAVA设计模式7:适配者模式,彻底解决两不兼容接口之间的问题
JAVA设计模式7:适配者模式,彻底解决两不兼容接口之间的问题
182 0
|
消息中间件 存储 运维
难住了,微服务之间的几种调用方式哪种最佳?
难住了,微服务之间的几种调用方式哪种最佳?
|
Linux
单一版本
单一版本
103 0
|
存储 缓存 监控
如何为从 1 到 10 万用户的应用程序,设计不同的扩展方案?
对于创业公司来说,有用户注册是好事情,但是当用户从零扩展到成千上万之后,Web 应用程序又该如何支持呢?