Actionは、戻り値も引数もないメソッドを指す組み込みのデリゲート型です。ctrl+左クリックで、Actionがこのように定義されていることがわかります:
public delegate void Action();
もう1行説明があります:
//
// 概要
// パラメータを受け取らず、値を返さないメソッドをカプセル化します。
簡単に言うと、Actionを使えば、必要なときに戻り値もパラメータもないデリゲート型を手動で宣言する必要がなく、例えばActionを直接使うことができます:
1 static void Main(string[] args)
2 {
3 Action a = func;
4 a();
5 }
6 public static void func()
7 {
8 Console.WriteLine("パラメータも戻り値もないメソッドの例");
9 }
10 /*
11 * パラメータも戻り値もないメソッドの例
12 */
アクションが参照できるのは、戻り値もパラメータもないメソッドだけです。
Actionを拡張したシステム、つまりAction<>では、Actionで参照されるメソッドのパラメータの数と種類をジェネリック型で指定することができます。
ここでは、2つのパラメータを持つメソッドを参照するAction<>の例を書きました。
1 static void Main(string[] args)
2 {
3 Action<string,string> a = func;
4 a("hello"," world");
5
6 }
7 public static void func(string str1,string str2)
8 {
9 Console.WriteLine(str1 + str2);
10 }
11 public static void func()
12 {
13 Console.WriteLine("パラメータも戻り値もないメソッドの例");
14 }
15 /*
16 * hello world
17 */
上で使ったfuncメソッドを直接オーバーライドしていることに注意してください。これは、Action<>がパラメータリストにマッチするメソッドを自動的にマッチさせ、見つからなければコンパイルしないことを示しています。
ActionもAction<>も、戻り値を持つメソッドを参照できないことを忘れないでください!