2012年10月28日日曜日

[C#] Func デリゲート

ラムダ式を書くときにインテリセンスで見かけるFunc型。
C#で定義済みのデリゲートらしい。

■そもそもデリゲートの定義
http://ufcpp.net/study/csharp/sp_delegate.html#definition

■Funcデリゲート
http://msdn.microsoft.com/ja-jp/library/vstudio/bb549151.aspx


Func<T, TResult>

っていう型の引数があったら

「T型の引数を取ってTResult型の戻り値を返すデリゲート」

を渡せばよい事になる。なんのこっちゃ。


Funcデリゲートを引数に取るメソッドを作ってみる。


        public void Test()
        {
            // ラムダ式で匿名メソッドのデリゲートを渡す。

            // (ここではmsg を引数に取り、それに文字列を足したものを戻り値とする)
            string result1 = funcTest(msg => { return msg + "1"; });
            string result2 =
funcTest(msg => { return msg + "2"; });

            Console.WriteLine(result1);
            Console.WriteLine(result2);
        }

        private string
funcTest(Func<string, string> method)
        {
            return method("ほげほげ");
        }




■実行結果
ほげほげ1
ほげほげ2


なんというか、ぴんとこない。まあいいや。


Func(T1, T2, TResult)だとかFunc(T1, T2, T3, TResult)だとか
引数の数を増やしただけのオーバーロードがたくさんあるようだ。



■よく見かける(ような気がする)定義済みのデリゲート、メモ

Predicate<in T>
T型の引数を取ってboolを返す
http://msdn.microsoft.com/ja-jp/library/vstudio/bfcke1bz.aspx

Action<in T>
T型の引数を取って戻り値を返さない
http://msdn.microsoft.com/ja-jp/library/vstudio/018hxwa8.aspx

0 件のコメント:

コメントを投稿