「C# エッセンシャルズ」まとめ その4
2.13 デリゲート (p.70, 71)メソッドを関数オブジェクトっぽいものに変換する機能。名前とメソッドシグネチャを含めて宣言を行う。new の引数にメソッドを渡してインスタンスを作成する。delegate bool Filter(string s); デリゲートの += メソッドを使って、複数のメソッドの保存と呼び出しを行うことができる。 using System; 以下、「C#エッセンシャルズ」には無い話。 C# 2.0 からは メソッドからデリゲートへの暗黙の変換が可能になったらしい。上の例は、こう書ける。 delegate bool Filter(string s); ・匿名メソッド C# 2.0 から匿名メソッドというものが導入された、、、が、もっと便利な構文 (ラムダ式) が C# 3.0 から導入されたようなので、省略。 ・ラムダ式 基本形 (式形式) (input parameters) => expression パラメータの括弧は、パラメータの数が1つの場合は省略可能。パラメータの型は、コンパイラによる型推論が可能な場合は省略可能。 x => x > 0; 本体部分が複数のステートメントからなる場合は、中括弧でくくる (ステートメント形式)。 n => { ・標準ジェネリックデリゲート 基本形 Func<TParam1, TParam2, ..., TResult> TParam1やTParam2 に引数の型を、Tresult に返り値の型を指定する。これを使って、最初の例を書き直してみると、 class Test {最初の例と比べると、かなり簡潔に書けるようになった。 Java陣営が、クロージャを導入するとかしないとか言っている間に (結局、JDK7 には入らないみたいだけど) C# の関数型機能がこんなに充実しているのに驚き。 参考: デリゲート (C# によるプログラミング入門) 関数型言語由来の新機能 (C# によるプログラミング入門) MSDN: Func(T, TResult) デリゲート (System)
by fkmn
| 2009-04-13 23:55
| IT
|
カテゴリ
以前の記事
2011年 06月
2011年 04月 2011年 02月 2011年 01月 2010年 12月 2010年 11月 2010年 05月 2010年 04月 2010年 03月 2009年 12月 more... ブログパーツ
リンク
検索
タグ
日記
IT
感想
本
programming
コンピュータ
ゲーム
Perl
CL
ライフサイエンス
一人読書会
インフォマティクス
Ruby
ブログ
ネタ
C#
PHP
yapcasia2008
生物
R
最新のトラックバック
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ファン申請 |
||