使用英语阅读

通过


Action 委托

定义

封装一个方法,该方法不具有参数且不返回值。

C#
public delegate void Action();

注解

可以使用此委托将方法作为参数传递,而无需显式声明自定义委托。 封装的方法必须对应于此委托定义的方法签名。 这意味着封装的方法必须没有参数,也没有返回值。 (在 C# 中,方法必须返回 void。在 F# 中,函数或方法必须返回 unit。在 Visual Basic 中,它必须由 ...End Sub 构造定义Sub。它也可以是返回忽略值的方法。) 通常,此类方法用于执行操作。

备注

若要引用没有参数并返回值的方法,请改用泛型 Func<TResult> 委托。

使用 Action 委托时,不必显式定义封装无参数过程的委托。 例如,以下代码显式声明名为 的 ShowValue 委托,并将对实例方法的 Name.DisplayToWindow 引用分配给其委托实例。

C#
using System;
using System.Windows.Forms;

public delegate void ShowValue();

public class Name
{
   private string instanceName;

   public Name(string name)
   {
      this.instanceName = name;
   }

   public void DisplayToConsole()
   {
      Console.WriteLine(this.instanceName);
   }

   public void DisplayToWindow()
   {
      MessageBox.Show(this.instanceName);
   }
}

public class testTestDelegate
{
   public static void Main()
   {
      Name testName = new Name("Koani");
      ShowValue showMethod = testName.DisplayToWindow;
      showMethod();
   }
}

以下示例通过实例化委托来简化此代码, Action 而不是显式定义新委托并为其分配命名方法。

C#
using System;
using System.Windows.Forms;

public class Name
{
   private string instanceName;

   public Name(string name)
   {
      this.instanceName = name;
   }

   public void DisplayToConsole()
   {
      Console.WriteLine(this.instanceName);
   }

   public void DisplayToWindow()
   {
      MessageBox.Show(this.instanceName);
   }
}

public class testTestDelegate
{
   public static void Main()
   {
      Name testName = new Name("Koani");
      Action showMethod = testName.DisplayToWindow;
      showMethod();
   }
}

还可以在 C# 中将 Action 委托与匿名方法一起使用,如以下示例所示。 (有关匿名方法的简介,请参阅 Anonymous Methods.)

C#
using System;
using System.Windows.Forms;

public class Name
{
   private string instanceName;

   public Name(string name)
   {
      this.instanceName = name;
   }

   public void DisplayToConsole()
   {
      Console.WriteLine(this.instanceName);
   }

   public void DisplayToWindow()
   {
      MessageBox.Show(this.instanceName);
   }
}

public class Anonymous
{
   public static void Main()
   {
      Name testName = new Name("Koani");
      Action showMethod = delegate() { testName.DisplayToWindow();} ;
      showMethod();
   }
}

还可以将 lambda 表达式分配给 Action 委托实例,如以下示例所示。 (有关 lambda 表达式的简介,请参阅 Lambda 表达式 (C#) lambda 表达式 (F#) .)

C#
using System;
using System.Windows.Forms;

public class Name
{
   private string instanceName;

   public Name(string name)
   {
      this.instanceName = name;
   }

   public void DisplayToConsole()
   {
      Console.WriteLine(this.instanceName);
   }

   public void DisplayToWindow()
   {
      MessageBox.Show(this.instanceName);
   }
}

public class LambdaExpression
{
   public static void Main()
   {
      Name testName = new Name("Koani");
      Action showMethod = () => testName.DisplayToWindow();
      showMethod();
   }
}

扩展方法

GetMethodInfo(Delegate)

获取指示指定委托表示的方法的对象。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

另请参阅