C#Action委托

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#Action委托
最近碰到了很多关于Action的⼀些代码,稍微看了下⽤法
Action的作⽤是封装⼀个函数,且该⽅法没有返回值(有返回值的函数⽆法被Action封装)。

同时Action还⽀持不同参数数量的函数,通过泛型来实现。

Action<T>代表Action所封装的函数是有⼀个参数,参数类型为T。

同理,Action最多⽀持16个参数的函数委托,不过每个参数的数据类型都要写到泛型⾥。

不同参数类型的Action声明:
Action
Action<T>
Action<T,T>
Action<T,T,T> ......
Action其实是⼀个委托delegate,如果我们使⽤delegate去封装⼀个函数的话,⾸先是需要进⾏委托声明的,如下⾯的代码
1namespace Delegate_Action
2 {
3//⾃定义委托声明
4public delegate void delegateFuntion();
5class Program
6 {
7static void Main(string[] args)
8 {
9 Test t = new Test();
10 delegateFuntion myFunction = t.Function; //函数封装
11 myFunction();
12
13return;
14 }
15 }
16
17class Test
18 {
19public void Function()
20 {
21 Console.WriteLine("Test Function!");
22 }
23 }
24 }
可以看到第4⾏进⾏了委托声明的动作,⽽为了操作简便,Action委托就可以免去这⼀步骤
如果⽤Action进⾏封装的话,代码如下
1namespace Delegate_Action
2 {
3class Program
4 {
5static void Main(string[] args)
6 {
7 Test t = new Test();
8 Action myAction = t.Function; //直接到位
9 myAction();
10
11return;
12 }
13 }
14
15class Test
16 {
17public void Function()
18 {
19 Console.WriteLine("Test Function!");
20 }
21 }
22 }
同时Action⽀持委托和匿名函数
1namespace Delegate_Action
2 {
3class Program
4 {
5static void Main(string[] args)
6 {
7 Test t = new Test();
8 Action myAction = delegate() { Console.WriteLine("Delegate Function!"); }; //直接到位
9 myAction();
10
11return;
12 }
13 }
最后就是Action可以通过参数的形式传递函数,这样就可以将Action⽤作回调函数(个⼈感觉⽤处最多的地⽅),代码如下 1namespace Delegate_Action
2 {
3class Program
4 {
5static void Main(string[] args)
6 {
7 Test t = new Test(CallBackFuntion);
8 t.Function();
9
10return;
11 }
12
13static void CallBackFuntion()
14 {
15 Console.WriteLine("Program Call Back Function!");
16 }
17 }
18
19class Test
20 {
21 Action callBack;
22
23public Test(Action cb)
24 {
25 callBack = cb;
26 }
27
28public void Function()
29 {
30 Console.WriteLine("Test Function!");
31 callBack();
32 }
33 }
34
35//结果:
36// Test Function!
37// Program Call Back Function!
38 }。

相关文档
最新文档