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();
writeline函数32 }
33 }
34
35//结果:
36// Test Function!
37// Program Call Back Function!
38 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论