• 委托与事件


    委托是一种类型;事件是委托的一个实例。委托的意义:异步多线程、逻辑分离

    public delegate string CateAction();//委托

    public event CateAction CateActionEvent;//事件

    事件只能在声明他的类内部调用(Invoke);委托可以在外部调用(Invoke);事件加了权限控制,保证事件不能在外部直接赋值和调用。

    事件执行前要判断不为null;

    public void CateEvent()
            {
                if (CateActionEvent!=null)
                {
                    //string result1 = CateActionEvent.Invoke();//顺序调用1,返回值是委托中最后一个函数的返回值
                    //string result2 = CateActionEvent();//顺序调用2,返回值是委托中最后一个函数的返回值
                    foreach (CateAction item in CateActionEvent.GetInvocationList())
                    {
                        string result3 = item.Invoke();//顺序调用3,可以获得每个函数的返回值
                        //item.BeginInvoke(null, null);//异步调用,多线程
                    }
                }
            }

    若委托的方法具有返回值,直接执行委托实例,得到的返回值是最后一个方法返回的;要想获得委托中每个方法的返回值,使用GetInvocationList()获得方法集合,逐个调用,像上面的循环;

    还有一个知识点就是,多播委托为变量配合lambda使用时,多个返回值只能返回最后一个值:

    //无参数,返回string类型
                Func<string> method = () => DateTime.Now.ToString();
                Console.WriteLine(method.Invoke());
    
                method += () => "1";
                method += () => "2";
                method += () => "3";
                method += () => "4";
                method += () => "5";
                method += Test1;
                Console.WriteLine(method.Invoke());//带返回值的多播委托,只能获得最后一个方法的返回值
    
                Console.Read();

    public static string Test1() { return "Test1"; }

    打印结果:2017/11/14 10:22:16   和  Test1

    参考:http://www.cnblogs.com/renzhitian/p/6080751.html

  • 相关阅读:
    Linux网络编程一站式学习
    quick-cocos2d-x教程8:程序框架内lib文件夹分析
    petshop4.0 具体解释之中的一个(系统架构设计)
    LNK快捷方式漏洞利用方式 exp制作教程
    Serializable 作用
    0 1背包模板
    跟着辛星认识一下PHP的自己主动载入
    海茶3 らぶデス3 入门经典教程
    win下vm10+mac os 10.9安装遇到问题
    enum 在c中的使用
  • 原文地址:https://www.cnblogs.com/xsj1989/p/7799232.html
Copyright © 2020-2023  润新知