C# Action用法

Action是无返回值的泛型委托

可以使用 Action<T1, T2, T3, T4> 委托以参数形式传递方法,而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有四个均通过值传递给它的参数,并且不能返回值。(在 C# 中,该方法必须返回 void)通常,这种方法用于执行某个操作。.

1、Action 表示无参,无返回值的委托

2、 Action<int,string> 表示有传入参数int,string无返回值的委托

3、Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托

  4、 Action<int,int,int,int> 
  表示有传入4个int型参数,无返回值的委托

5、 Action至少0个参数,至多16个参数,无返回值。

class Program
    {
        static void Main(string[] args)
        {
            //循环调用,action不传参
            List<Action> actions = new List<Action>();
            for (int i = 0; i < 10; i++)
            {
                //因为是按地址传递参数,所以要声明变量,不如结果都是10
                int k = i;
                actions.Add(() => Console.WriteLine(k));
            }
            foreach (Action a in actions)
            {
                a();
            }

            //传递两个参数
            Action<string, int> action = new Action<string, int>(ShowAction);
            Show("张三",29,action);

            //传递一个参数
            Show("张三",o=>Console.WriteLine(o));

            //不传递参数调用
            Show(()=>Console.WriteLine("张三"));
        }
        public static void ShowAction(string name, int age)
        {
            Console.WriteLine(name + "的年龄:" + age);
        }
        public static void Show(string name, int age, Action<string, int> action)
        {
            action(name, age);
        }
        public static void Show(string name, Action<string> action)
        {
            action(name);
        }
        public static void Show(Action action)
        {
            action();
        }
    }

输出结果:

0
1
2
3
4
5
6
7
8
9
张三的年龄:29
张三
张三