C# Action委托介绍和用法示例

2021年5月10日16:15:08 发表评论 1,050 次浏览

动作委托是内置的通用类型委托。该委托使你不必定义下面的示例中所示的自定义委托, 并使你的程序更具可读性和优化性。它在下定义系统命名空间。它最多可以包含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" );

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: