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");
  • 相关阅读:
    自动化单元测试工具 EvoSuite 的简单使用
    Dialog lookup method
    微软Axapta中PDF支持中文
    Connected to Ax AOS by code
    Dialog control field event
    Find the tables extending a specific extended data type
    sqlplus不使用服务名,直接使用IP地址连接Oracle
    ATL编写的带窗口的控件,无论VC6(ATL3.0) VC7.1(ATL7.0) 在Windows 7 或 Server 2008 下,WinForm调用时发生的问题
    Ice的slice文件自定义编译命令
    VC9 SP1中新增加的标准 C++ 库中的新功能
  • 原文地址:https://www.cnblogs.com/williamwsj/p/6055278.html
Copyright © 2011-2022 走看看