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

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

  • 相关阅读:
    有点郁闷,但是又不能表现出来,好难过
    搞平衡,我们公司跟国企也没有啥区别
    找兼职遇到的尴尬
    两岁的儿子
    Shark DB Expert 2.6数据库客户端工具终结者 问世
    .Net 中访问Oracle 数据表,出现OCI22053: overflow error
    Oracle冷备迁移过程和在线日志损坏处理
    转:Oracle数据库的优化之数据库磁盘I/O
    Linux批量移动文件grep+mv
    Oracle下导入txt的shell脚本以及配置
  • 原文地址:https://www.cnblogs.com/lori/p/2482425.html
Copyright © 2011-2022 走看看