zoukankan      html  css  js  c++  java
  • 事件的好处~实现对修改的封闭,对扩展的开放!~续

    本文章主要以上一篇文件的代码在写法上进行一个优化,更代码更精简,更能发挥.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();

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

  • 相关阅读:
    struts2--表单重复提交
    struts2--文件上传与下载
    springboot配置redis+jedis,支持基础redis,并实现jedis GEO地图功能
    Mybatis配置——自动使用驼峰命名 属性映射字段(默认为false)
    解决PageHelper.startPage(page, size)后,关于PageInfo的total等属性不正确等问题
    Socket网络通信——IO、NIO、AIO介绍以及区别
    FTPClient TLS 与 FTP 进行数据传输异常:Remote host closed connection during handshake
    常用Concurrent.util包工具类——高并发
    线程池——Executors
    多线程的设计模式:Future、Master-Worker
  • 原文地址:https://www.cnblogs.com/lori/p/2482425.html
Copyright © 2011-2022 走看看