C# 委托链、多路广播委托

委托链、多路广播委托:也就是把多个委托链接在一起,我们把链接了多个方法的委托称为委托链或多路广播委托

例:

 1 class HelloWorld
 2    {
 3       //定义委托类型
 4       delegate void DelegationChain();
 5       static void Main(string[] args)
 6       {
 7          //用静态方法来实例委托
 8          DelegationChain mydelegateone=new DelegationChain(HelloWorld.Fun2);
 9           //用实例方法来实例委托
10          DelegationChain mydelegatetwo=new DelegationChain(new HelloWorld().Fun1);
11          //定义一个委托对象初始化为null
12          DelegationChain delegationChain=null;
13           //使用‘+链接委托,链接后就成了委托链
14           delegationChain+=mydelegateone;
15           delegationChain+=mydelegatetwo;
16           //调用委托链
17           delegationChain();
18          Console.ReadKey();
19       }
20       private void Fun1()
21       {
22           Console.WriteLine("Fun1");
23       }
24       private static void Fun2()
25       {
26           Console.WriteLine("Fun2");
27       }
28    }

运行结果:

时间: 2024-12-24 06:44:27

C# 委托链、多路广播委托的相关文章

委托、Lambda表达式、事件系列04,委托链是怎样形成的, 多播委托

在"委托.Lambda表达式.事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性"中,反编译委托,发现委托都是多播委托. 既然委托是多播委托,我们可以通过"+="把多个方法赋给委托变量,这样就形成了一个委托链, 它是怎样形成的?来看下面的例子: namespace ConsoleApplication3 { internal delegate void MySayDel(string msg); class Program { stati

迭代委托链

有时候调用一个委托链需要获取委托链中每个调用的返回值,这是时候需要调用 system.Delegate类提供的GetInvocation方法去获取一组委托,实例如下: using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication2{ public delegate double ProcessResults(double x,doubl

使用GetInvocationList对委托链进行更多的控制

委托链中所有项都会被调用,因为委托类型的 Invoke 方法包含了对数组中的所有项进行遍历的代码.这是一个很简单的算法.尽管这个简单的算法足以应付很多情形,但也有它的局限性.例如,除了最后一个返回值,其他所有回调方法的返回值都会被丢弃.但局限并不止于此.如果被调用的委托中有一个抛出了异常或阻塞了相当长一段时间,会出现什么情况呢?由于这个简单的算法是顺序调用链中的每一个委托,所以一个委托对象出现问题,链中后续的所有对象都调用不了啊.显然,这个算法还不够健壮性. 所以 MulticastDelega

初识C#委托及委托链

委托是c#很重要的特性.代码如下: class Program { public delegate void DelegateTest(); static void Main(string[] args) { DelegateTest dtstatic = new DelegateTest(Program.method1);//实例化,静态方法,不用new DelegateTest dtinstance = new DelegateTest(new Program().method2);//实例

JavaScript和JQuery中的事件\委托链\事件冒泡\事件捕获,兼容所有浏览器

有做过北大青鸟培训讲师经验的我,如今在一家公司做技术部经理的职位,发现有很多程序员的基本功相当糟糕,在组织企业内部培训时讲解了一些案例,总结了一些经典代码,希望对自己和有需要的人提供一些帮助吧: JavaScript版本: DOM0事件不支持委托链 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="C

C# 委托之把委托从委托链(多播委托)移除

运用“-”运算符将委托从委托链移除 1 class HelloWorld 2 { 3 //定义委托类型 4 delegate void DelegationChain(); 5 static void Main(string[] args) 6 { 7 //用静态方法来实例委托 8 DelegationChain mydelegateone=new DelegationChain(HelloWorld.Fun2); 9 //用实例方法来实例委托 10 DelegationChain mydele

委托Delegate,多播委托和委托链

定义一个委托 public delegate void CalculateDelegate(int 32 x,int 32 y); 定义一个委托类型的变量 public static CalculateDelegate mydelegate; 定义一个方法和委托绑定,注意定义的方法和委托的参数要统一 public static void Add(int 32 x,int 32 y) { console.writeline(x+y); } 将方法和委托绑定 public static void m

委托和委托链

1.委托是一种类型,声明一个委托的时候有点像创建一个方法,我们下面两个例子都用的委托,代码如下,eg: public delegate int MyDelegate1(int i); 示例代码,eg: 1 public Form3() 2 { 3 InitializeComponent(); 4 } 5 public int F1(int i) 6 { 7 return 1; 8 } 9 public int F2(int i) 10 { 11 return 2; 12 } 13 public

.net委托链

委托链可以增加方法,可以移除方法,如果是无返回值的方法,我们把它们都绑定到一个委托上面的话,直接调用,那么调用此委托就会依次调用其中的方法:但是如果是多个有返回值的委托链,如果我们不采用特殊手段,直接调用的话,会返回最后一个方法的值,那么我们只能通过下面的方法来实现了,下面方法的本质也是一个个的调用其中的方法,使用GetInvocationList()来获取多播中的单独委托然后一个一个的执行然后我们可以把值存放到一个数组或者list泛型中去.具体代码如下 private MyDelegate m