C# 委托/Func() 中 GetInvocationList() 方法的使用 | 接收委托多个返回值

在日常使用委托时,有以下常用方法

方法名称 说明
 Clone   创建委托的浅表副本。
 GetInvocationList   按照调用顺序返回此多路广播委托的调用列表。
 GetMethodImpl   返回由当前的 MulticastDelegate 表示的静态方法。
 GetObjectData   用序列化该实例所需的所有数据填充 SerializationInfo 对象。
 MemberwiseClone   创建当前 Object 的浅表副本。
 RemoveImpl   调用列表中移除与指定委托相等的元素

GetInvocationList() 的用途

当委托有多个返回值时

当你编写一个 delegate委托 或 Func<>泛型委托 ,并为实例绑定多个方法时,每个方法都有一个返回值。可能会遇到这种情况:

  class Program
    {
        public static string a(string str)
        {
            Console.WriteLine("方法a");
            return str+"方法a";
        }
        public static string b(string str)
        {
            Console.WriteLine("方法b");
            return str + "方法b";
        }
        public static string c(string str)
        {
            Console.WriteLine("方法c");
            return str + "方法c";
        }
        static void Main(string[] args)
        {
            Func<string, string> func=a;
            func += b;
            func += c;
            Console.WriteLine(func("测试"));
            Console.ReadKey();
        }

    }

调用委托后,只能获取到最后一个调用方法的返回值。


使用 GetInvocationList()

GetInvocationList() 能够返回 这个委托的方法链表。

通过使用循环,把每个方法顺序调用一次,每次循环中都会产生当前调用方法的返回值。

    class Program
    {
        public static string a(string str)
        {
            Console.WriteLine("方法a");
            return str+"方法a";
        }
        public static string b(string str)
        {
            Console.WriteLine("方法b");
            return str + "方法b";
        }
        public static string c(string str)
        {
            Console.WriteLine("方法c");
            return str + "方法c";
        }
        static void Main(string[] args)
        {
            Func<string, string> func=a;
            func += b;
            func += c;
            var funclist = func.GetInvocationList();
            foreach (Func<string, string> f in funclist)
            {
                Console.WriteLine(f("测试"));
            }
            Console.ReadKey();
        }

  

相当于把委托里顺序调用的方法分离成一个列表,通过循环调用,循环获取。

原文地址:https://www.cnblogs.com/whuanle/p/10035549.html

时间: 2024-08-06 21:21:06

C# 委托/Func() 中 GetInvocationList() 方法的使用 | 接收委托多个返回值的相关文章

在IDEA中设置方法自动注释(带参数和返回值)

第一部分 设置 打开设置面板 新建 在线模板 新建自动添加规则,注意 这里触发的字符 不能随便写 必须为 * Template text 区域 看上去有点乱,但是是为了显示时的对齐,该区域的内容如下(空格之类的不要乱动): * * $VAR1$ $params$ * @return $returns$ * @author Chendezhou * @date $date$ $time$ */ 编辑变量的内容 其中 VAR1 的内容如下 groovyScript("def result=''; d

Java中的方法(形参及实参)return返回类型

如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用,其他几种修饰符的使用在后面章节中会详细讲解滴 2. 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void :如果方法具有返回值,则需要指定返回值的类型,并且在

abp 指定 AppService中某个方法不是用驼峰命名(CamelCase)返回

一.直接使用ContentResult return new ContentResult { ContentType = "application/json", Content = JsonConvert.SerializeObject(obj, new JsonSerializerSettings { ContractResolver = new DefaultContractResolver() }) }; 二 使用MVC ResultFilter public class Jso

求助,JS 方法调用的问题,写了返回值,确调用时返回Undefined(新人第一次写)

文本框txtUserName 的Onbulr 绑定方法 txtUserNameOnblur  这可以正常执行 而下面的btnRegister 的click 事件则无法正常调用    txtUserNameOnblur () 不知道是不是ajax的回调函数调用问题,求助 $("#txtUserName").bind("blur",txtUserNameOnblur); function txtUserNameOnblur() { if ($("#txtUse

父类作为方法形参实现多态(父类作为返回值)待加

宠物类 package com.pangui; //父类 public class CongWu { private String name = "无名氏"; private int health ; private int love; // public CongWu() { // //无参构造方法 // } public CongWu(String name,int health,int love) { //带参构造方法 this.name = name; if(health &l

Java 中无返回值的方法在使用时应该注意的问题

Java 中的方法是形态多样的.无返回值的方法在使用时应该规避哪些问题呢? 一.不可以打印调用或是赋值调用,只能是单独调用(非常重要): 二.返回值没有,不代表参数就没有: 三.不能return一个具体的值,否则会报错: 四.return分号可以直接省略: 五.无返回值方法应该使用类型void. 原文地址:https://www.cnblogs.com/yanglongbo/p/10981842.html

委托delegate 泛型委托action&lt;&gt; 返回值泛型委托Func&lt;&gt; 匿名方法 lambda表达式 的理解

1.使用简单委托 namespace 简单委托 { class Program { //委托方法签名 delegate void MyBookDel(int a); //定义委托 static MyBookDel myBookDel; //普通方法 public static void MathBook(int a) { Console.WriteLine("我是数学书" + a); } static void Main(string[] args) { myBookDel += Ma

面向对象中:变量,方法,属性相关知识及示例

变量: 实例变量(字段): class Foo: def __init__(self,name,age): self.__name = name #私有实例变量,只能内部调用,外部不能调用,子类不能调用 self.age = age #公有实例变量,都可以调用 def func(self): pass类变量(静态字段): class Foo: __race = '人类' #私有静态字段,只能内部调用,外部不能调用,子类不能调用 country = '中国' #公有静态字段 def __init_

Java 中带参带返回值方法的使用

如果方法既包含参数,又带有返回值,称为带参带返回值的方法. 例: 实现功能:将考试成绩排序并输出,返回成绩的个数 实现思路: 1. 定义一个包含整型数组参数的方法,用来传入成绩数组 2. 在方法体中使用 Arrays.sort( ) 方法对成绩数组进行排序,然后使用 Arrays.toString( ) 方法将数组转换为字符串并输出,最后使用 return 返回数组中元素的个数. 3. 调用方法时需要先创建对象,然后再调用.调用时为其传入成绩数组,并获取方法的返回值,保存在变量中,最后输出成绩的