多播委托——GetInvocationList方法

本文介绍了多播委托的概念及其使用方式,包括如何通过GetInvocationList方法获取委托链中的各个方法,并展示了如何逐一调用这些方法。此外,还解释了当委托具有返回值时,最终返回的是链中最后一个方法的数据。
多播委托——GetInvocationList方法
1、委托链--多播委托
2、GetInvocationList
3、调用委托就会一次执行该方法,如果其中一个方法出现异常
4、如果委托具有返回值,调用委托后,返回最后一个方法中的数据
5、使用GetInvocationList()方法可以返回一个Delegate[]类型 
6、Delegate类是一个抽象类,所有委托的父类


static void Main(string[] args)
        {
            DelegateText TextAll = Text1;
            TextAll += Text2;
            TextAll += Text3;
            Delegate[] delegates = TextAll.GetInvocationList();
            for (int i = 0; i < delegates.Length; i++)
            {
                DelegateText TextEvery = (DelegateText)delegates[i];
                int result = TextEvery();
                Console.WriteLine(result);
            }
            Console.ReadKey();


        }
        public delegate int DelegateText();
        static int Text1()
        {
            Console.WriteLine("我是Text1");
            return 1;
        }
        static int Text2()
        {
            Console.WriteLine("我是Text2");
            return 2;
        }
        static int Text3()
        {
            Console.WriteLine("我是Text3");
            return 3;
        }




二、自定义 delegate 详解 1. 基本定义与声明 自定义 delegate 是使用 delegate 关键字声明的委托类型,可以定义特定的方法签名。 // 声明一个无参数无返回值的委托 public delegate void MyDelegate(); // 声明一个有参数有返回值的委托 public delegate int MethodDelegate(int x, int y); 运行项目并下载源码 cs 运行 自定义 delegate 至少 0 个参数,至多 32 个参数,可以无返回值,也可以指定返回值类型。 2. 使用示例 public class ExerciseDelagte { public delegate void MyDelegate(); // 声明一个无参数无返回值的委托 public MyDelegate myDelegate; // 初始化委托 public void DelegateExample() { Console.Write("我是Delegate委托赋予的方法\n"); } public void DelegateExample2() { Console.Write("我是Delegate多播委托的实例\n"); } } public class Demo { static void Main(string[] args) { ExerciseDelagte exdelegate = new ExerciseDelagte(); exdelegate.myDelegate = exdelegate.DelegateExample; // 绑定实例方法 exdelegate.myDelegate += exdelegate.DelegateExample2; // 可以绑定多个方法,称为多播委托 exdelegate.myDelegate(); // 调用委托 } } 运行项目并下载源码 cs 运行 3. 多播委托 自定义 delegate 支持多播,即一个委托实例可以引用多个方法,使用 += 运算符添加方法,使用 -= 运算符移除方法。 exdelegate.myDelegate += exdelegate.DelegateExample2; // 添加方法 exdelegate.myDelegate -= exdelegate.DelegateExample2; // 移除方法 运行项目并下载源码 cs 运行 4. 使用场景 自定义 delegate 适用于以下情况: 需要特定方法签名,而内置委托类型不满足需求时 需要更明确的类型名提高代码可读性时 需要支持多播委托时(虽然 Action 也可以实现,但不推荐) ———————————————— 版权声明:本文为优快云博主「三千道应用题」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/lzt1027/article/details/149604057详细讲解一下呗
最新发布
01-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值