ラムダ式を書くときにインテリセンスで見かける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 件のコメント:
コメントを投稿