动作委托是内置的通用类型委托。该委托使你不必定义下面的示例中所示的自定义委托, 并使你的程序更具可读性和优化性。它在下定义系统命名空间。它最多可以包含1个输入参数, 最多可以包含16个输入参数, 并且不包含任何输出参数。 Action委托通常用于不包含任何返回值的方法, 换句话说, Action委托与返回类型为void的那些方法一起使用。它也可以包含相同类型或不同类型的参数。
语法如下:
//One input parameter
public delegate void Action <in P> (P obj);
//Two input parameters
public delegate void Action <in P1, in P2>(P1 arg1, P2 arg2);
在此, P, P1和P2是输入参数的类型, 而arg1和agr2是Action委托封装的方法的参数。
例子:下面的程序说明了我们如何创建自定义委托。
//C# program to illustrate delegates
using System;
class GFG {
//Declaring the delegate
public delegate void my_delegate( int p, int q);
//Method
public static void myfun( int p, int q)
{
Console.WriteLine(p - q);
}
//Main method
static public void Main()
{
//Creating object of my_delegate
my_delegate obj = myfun;
obj(10, 5);
}
}
输出如下:
5
例子:它演示了动作委托的使用。
//C# program to illustrate Action delegates
using System;
class GFG {
//Method
public static void myfun( int p, int q)
{
Console.WriteLine(p - q);
}
//Main method
static public void Main()
{
//Using Action delegate
//Here, Action delegate
//contains two input parameters
Action<int , int> val = myfun;
val(20, 5);
}
}
输出如下:
15
说明:在上面的示例中, 使用Action委托可以减少代码的大小, 并使程序更具可读性。这里的动作委托包含两个输入参数。然后我们直接分配MyfunAction委托的方法。
重要事项:
Action Delegates和Function Delegates之间的唯一区别是Action Delegates不返回任何内容, 即void返回类型。
也可以使用new关键字初始化动作委托。
Action<int> val = new Action<int>(myfun);
也可以通过直接分配给方法来初始化动作委托。
Action<int> val = myfun;
你还可以将Action委托与匿名方法一起使用, 如以下示例所示:
例子:
Action<string> val = delegate ( string str)
{
Console.WriteLine(str);
};
val( "lsbin" );
你还可以将Action委托与lambda表达式一起使用, 如以下示例所示:
例子:
Action<string> val = str => Console.WriteLine(str);
val( "lsbin" );