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小时内删除。