当前位置: 首页 > news >正文

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

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

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

相关文章:

  • zabbix服务端的安装手册
  • PerformanceCountersHelper
  • Linux / Unix Command: va_arg
  • Oracle的基本使用一
  • 鼠标浮上 图片边框变色
  • SQLmap工具介绍及其使用
  • 51cto,这是怎么回事?
  • jquery 选择时间(小时)区间(一)
  • 五大浏览器内核
  • C# DateTime 月第一天和最后一天 取法
  • getLayoutInflater().inflate .
  • 前端lvs+keepalived 后端 lnmp 群集 mysql主从+sersync
  • 做好一个高效的程序员吧
  • OSPF各种LSA的比较
  • 数据库热备容灾方案(上海某医院)
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【EOS】Cleos基础
  • Android单元测试 - 几个重要问题
  • gcc介绍及安装
  • jquery ajax学习笔记
  • leetcode讲解--894. All Possible Full Binary Trees
  • Python打包系统简单入门
  • Quartz初级教程
  • ReactNativeweexDeviceOne对比
  • 半理解系列--Promise的进化史
  • 创建一个Struts2项目maven 方式
  • 搞机器学习要哪些技能
  • 给github项目添加CI badge
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用Gradle第一次构建Java程序
  • 使用putty远程连接linux
  • 学习笔记TF060:图像语音结合,看图说话
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一文看透浏览器架构
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • #NOIP 2014# day.2 T2 寻找道路
  • #预处理和函数的对比以及条件编译
  • (1)(1.9) MSP (version 4.2)
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net 怎么循环得到数组里的值_关于js数组
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @Transactional类内部访问失效原因详解
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [20160807][系统设计的三次迭代]
  • [ABC294Ex] K-Coloring
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [bzoj1901]: Zju2112 Dynamic Rankings