英語で読む

次の方法で共有


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# の匿名メソッドで デリゲートを使用することもできます。 (匿名メソッドの概要については、「 匿名メソッド」を参照してください)。

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

次の例に示すように、ラムダ式を Action デリゲート インスタンスに割り当てることもできます。 (ラムダ式の概要については、「 ラムダ式 (C#)」または「ラムダ式(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
.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

こちらもご覧ください