この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Action<T> デリゲート

 

公開日: 2016年10月

単一のパラメーターを受け取り、戻り値を持たないメソッドをカプセル化します。

この型の .NET Framework ソース コードを参照するを参照してください。、 Reference Sourceです。

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

public delegate void Action<in T>(
	T obj
)

パラメーター

obj
Type: T

このデリゲートによってカプセル化されるメソッドのパラメーター。

型パラメーター

inT

このデリゲートによってカプセル化されるメソッドのパラメーターの型。

System_CAPS_noteメモ

この型の .NET Framework ソース コードを表示するを参照してください。、 Reference Sourceです。 ソース コードをオンラインで参照、オフラインで表示、リファレンスをダウンロードおよび; デバッグ中にソース (パッチや更新を含む) をステップsee instructions.

使用することができます、Action<T>をパラメーターとして明示的にカスタム デリゲートを宣言しなくても、メソッドに渡すデリゲート。 カプセル化されるメソッドは、このデリゲートによって定義されているメソッドのシグネチャに対応する必要があります。 これは、カプセル化されるメソッドは、値によって渡された 1 つのパラメーターが必要し、値を返す必要がないことを意味します。 (C# の場合、メソッドが返す必要がありますvoidです。 Visual Basic で定義する必要があります、Subしています.End Sub構築します。 できますが無視される値を返すメソッド。) 通常、このようなメソッドは、操作の実行に使用されます。

System_CAPS_noteメモ

メソッドを参照する、1 つのパラメーターを持ち、値を返します、ジェネリックを使用してFunc<T, TResult>代わりに委任します。

使用すると、Action<T>デリゲートがありませんを明示的に 1 つのパラメーターを持つメソッドをカプセル化するデリゲートを定義します。 たとえば、次のコードを明示的に宣言という名前のデリゲートDisplayMessageへの参照を割り当てると、WriteLineメソッドまたはShowWindowsMessageメソッドのデリゲートのインスタンスにします。

using System;
using System.Windows.Forms;

delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
   public static void Main()
   {
      DisplayMessage messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

次の例では、インスタンス化でこのコードが簡素化し、Action<T>明示的に新しいデリゲートを定義して、名前付きメソッドをそこに割り当てるのではなくデリゲート。

using System;
using System.Windows.Forms;

public class TestAction1
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

使用することも、Action<T>次の例に示すように、C# の場合は、匿名メソッドを持つデリゲートします。 (匿名メソッドの概要については、次を参照してください匿名メソッド (C# プログラミング ガイド)。)。

using System;
using System.Windows.Forms;

public class TestAnonMethod
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = delegate(string s) { ShowWindowsMessage(s); };
      else
         messageTarget = delegate(string s) { Console.WriteLine(s); };

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

ラムダ式を割り当てることができます、Action<T>次の例に示すように、インスタンスを委任します。 (ラムダ式の概要については、次を参照してくださいラムダ式 (C# プログラミング ガイド)。)。

using System;
using System.Windows.Forms;

public class TestLambdaExpression
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = s => ShowWindowsMessage(s); 
      else
         messageTarget = s => Console.WriteLine(s);

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

ForEachForEach<T>の各メソッドの実行、Action<T>をパラメーターとしてデリゲートします。 デリゲートによってカプセル化されるメソッドでは、配列またはリスト内の各要素に対してアクションを実行することができます。 この例では、ForEach具体的なを指定するメソッド。

次の例での使用、Action<T>の内容を印刷するデリゲート、List<T>オブジェクト。 この例では、Print一覧の内容をコンソールに表示するメソッドを使用します。 さらに、c# の例では、内容をコンソールに表示する匿名メソッドの使用も示します。 この例で明示的に宣言されていないことに注意してください、Action<T>変数。 代わりに、1 つのパラメーターを受け取るし、値を返さないメソッドへの参照を渡す、List<T>.ForEach単一パラメーターを持つが、メソッド、Action<T>委任します。 同様に、例では、C# の場合、Action<T>デリゲート明示的にインスタンス化されないため、匿名メソッドのシグネチャのシグネチャの一致、Action<T>で想定されるデリゲート、List<T>.ForEachメソッドです。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<String> names = new List<String>();
        names.Add("Bruce");
        names.Add("Alfred");
        names.Add("Tim");
        names.Add("Richard");

        // Display the contents of the list using the Print method.
        names.ForEach(Print);

        // The following demonstrates the anonymous method feature of C#
        // to display the contents of the list to the console.
        names.ForEach(delegate(String name)
        {
            Console.WriteLine(name);
        });
    }

    private static void Print(string s)
    {
        Console.WriteLine(s);
    }
}
/* This code will produce output similar to the following:
 * Bruce
 * Alfred
 * Tim
 * Richard
 * Bruce
 * Alfred
 * Tim
 * Richard
 */

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
2.0 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: