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();

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

  • 相关阅读:
    网络编程
    正则表达式
    对空气质量历史数据的爬取
    通过移动设备行为数据预测性别年龄
    电影口碑与海报图像的相关性分析
    微博情感分析
    《python3网络爬虫开发实战》--验证码的识别
    python编程快速上手
    Echarts树图定制详解
    Servlet学习笔记【2】---Http数据包
  • 原文地址:https://www.cnblogs.com/lori/p/2482425.html
Copyright © 2011-2022 走看看