zoukankan      html  css  js  c++  java
  • 读书笔记 C#事件event浅析(一)

    在C#中,所谓event事件,就是一种特殊的委托。如果要声明事件,首先就要声明一个相对应的委托类型。按照流程来说,事件相当于委托类型往上升了一级似的,我是这样认为的。

            //1.先声明委托类型
            public delegate void MethodDel(string param);
            //2.再次声明事件
            public event MethodDel DoEvent;

    event事件是一种特殊的多播委托,它可以用+=来新增方法引用,也可以用-=移除方法引用。

                //用lambda表达式 附加
                p.DoEvent += param => { Console.WriteLine(param); };
    
                //用匿名函数 附加
                p.DoEvent += delegate(string param) { Console.WriteLine(param); };
    
                //用自定义方法 附加
                p.DoEvent += Print;
    
                //移除Print方法
                p.DoEvent -= Print;
    
               public static void Print(string param) {
                Console.WriteLine(param);
               }

    在用匿名函数或lambda表达式附加方法的时候,如果后面有逻辑需要移除这些方法,在起始附加的时候,就要用委托变量去装载这些方法。

    在使用event事件的时候,它给我的一个非常深的印象就是层层调用或引用。本来从A点可以直线的方式奔到B点,但是有了事件,可以从A点奔到C点,C点奔到D点,再从D点奔到B点,转了一大圈,最后费了大把气力,终于引用到了需要被调用的方法。而传到该方法的参数,在中途已经被折腾过N遍,该方法可以直接获取这些参数的值。

    事件是个好东西,它可以将外部自定义的方法引入到其他已经被封装好的方法中,而这些被封装好的方法可以不用去管你外部自定义方法的实现过程,它也没精力去管。

                public void Show(string param) {
                    OnDoEvent(param);
                }
    
                //调用事件
                protected virtual void OnDoEvent(string param) {
                    if(DoEvent != null) {
                        DoEvent(param);
                    }
                }
    
                //---------------------------------
               //用自定义方法 附加
                p.DoEvent += Print;
    
                p.Show("parameter");
  • 相关阅读:
    java实现拼出漂亮的表格
    java实现金额组合
    java实现金额组合
    java实现金额组合
    java实现金额组合
    java实现Playfair 密码
    Mblog 部署手册
    配置Tomcat apr运行模式
    Duboo入门示例(Idea开发环境)
    Font-Awesome最新版完整使用教程
  • 原文地址:https://www.cnblogs.com/williamwsj/p/6055278.html
Copyright © 2011-2022 走看看