Actionでデリゲート

プログラミングC# 第6版 5.2


引き続きデリゲートの話です。

Actionというのはジェネリック型というものらしいです。今まででも既にListとか登場してましたね。

でActionを使ってデリゲートとのことなんですが、まずジェネリックについて先に説明してくれないんでしょうか?(笑)

まぁC++を先に勉強してるのでこれがテンプレートみたいなもん、というのは大体わかってるんですが、C#しか勉強したことない人もいると思うので本としては先にジェネリックの説明があっても良いもんだと思うんですけどねぇ。

まぁとりあえずActionの動作確認をしてみます。

Actionというのはつまり、戻り値がvoidでT型の引数を取る関数をデリゲートしてくれるものみたいです。

まずは普通にdelegateを使った場合の確認です。

using System;

delegate void Hoge (int i);

class Program {
    public static void Foo (int i) {
        Console.WriteLine("Foo: " + i);
    }
    
    static void Main () {
        Hoge dobj = Foo;
        
        dobj(10);
    }
}
$ main
Foo: 10

これをActionに置き換えてみます。

using System;

class Program {
    public static void Foo (int i) {
        Console.WriteLine("Foo: " + i);
    }
    
    static void Main () {
        // 戻り値voidの引数intのデリゲート型
        Action<int> dobj = Foo;
        
        dobj(10);
    }
}
$ main
Foo: 10

うまく動いてますね。

さらに本によるとActionのように複数の引数を指定することもできるようです。確認してみます。

using System;

class Program {
    public static void Foo (int i,string s) {
        Console.WriteLine("Foo: " + i + ": " + s);
    }
    
    static void Main () {
        Action<int,string> dobj = Foo;
        
        dobj(10,"test");
    }
}
$ main
Foo: 10: test

バッチシ動いてますね。

ちなみにActionに指定できる引数の数は最大16個まで指定できるようです。引数多すぎですねー。