动作委托是内置的泛型类型委托。该委托使您不必定义下面的示例中所示的自定义委托,并使您的程序更具可读性和优化性。它在系统名称空间下定义。它最多可以包含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
示例:演示了Action委托的用法。
// 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 val = myfun;
val(20, 5);
}
}
输出:
15
说明:在上面的示例中,使用Action委托可以减少代码的大小,并使程序更具可读性。这里的动作委托包含两个输入参数。然后,我们直接将myfun方法分配给Action委托。
重要事项:
- Action Delegates和函数 Delegates之间的唯一区别是Action Delegates不返回任何内容,即具有空返回类型。
- 动作委托也可以使用new关键字进行初始化。
Action
val = new Action (myfun); - 也可以通过直接分配给方法来初始化动作委托。
Action
val = myfun; - 您还可以将Action委托与匿名方法一起使用,如以下示例所示:
例子:
Action
val = delegate(string str) { Console.WriteLine(str); }; val("GeeksforGeeks"); - 您还可以将Action委托与lambda表达式一起使用,如以下示例所示:
例子:
Action
val = str = > Console.WriteLine(str); val("GeeksforGeeks");