閱讀英文

共用方式為


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();
   }
}

您也可以在 Action C# 中使用委派搭配匿名方法,如下列範例所示。 (如需匿名方法的簡介,請參閱 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

另請參閱