欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 委托链(多播委托)

程序员文章站 2022-06-18 10:01:59
委托既可以封装一个方法,又可以对同一类型的方法进行封装,它就是多播委托 运行结果: ......

委托既可以封装一个方法,又可以对同一类型的方法进行封装,它就是多播委托

 1 using system;
 2 using system.collections.generic;
 3 using system.linq;
 4 using system.text;
 5 
 6 namespace delegatetest
 7 {
 8     class program
 9     {
10         //申明一个委托类型,它的实例引用一个方法
11         //该方法传递0参数,返回void类型
12         public delegate string delegatetestone();
13 
14         static void main(string[] args)
15         {
16             //用静态方法来实例化委托
17             delegatetestone teststatic = new delegatetestone(program.method1);
18 
19             //用实例方法来实例化委托
20             delegatetestone test2 = new delegatetestone(new program().method2);
21 
22             //用实例方法来实例化委托
23             delegatetestone test3 = new delegatetestone(new program().method3);
24 
25             //定义空一个委托对象
26             delegatetestone deleteall = null;
27             deleteall += teststatic;
28             deleteall += test2;
29             deleteall += test3;
30             console.writeline(test(deleteall));
31 
32             console.readline();
33         }
34 
35 
36         public static string method1()
37         {
38 
39             //console.writeline("这是一个静态方法");
40             return "这是一个静态方法";
41         }
42 
43         public string method2()
44         {
45             //console.writeline("这是实例方法2");
46             return "这是实例方法2";
47         }
48 
49         public string method3()
50         {
51            // console.writeline("这是实例方法3");
52             return "这是实例方法3";
53         }
54 
55 
56         //测试多播委托
57         public static string test(delegatetestone testone)
58         {
59             if (testone == null)
60             {
61                 return null;
62             }
63             stringbuilder returnstring = new stringbuilder();
64 
65             delegate[] delegatearray = testone.getinvocationlist();
66 
67             foreach (delegatetestone t in delegatearray)
68             {
69                 try
70                 {
71                     returnstring.append(t() + environment.newline);
72                 }
73                 catch (exception e)
74                 {
75 
76                 }
77             }
78             //把结果返回给调用者
79             return returnstring.tostring();
80         }
81 
82     }
83 }

运行结果:

C# 委托链(多播委托)