« Ruby関西が今熱い!~Ruby is Agile! | トップページ | Perl関西はハッカーのコミュニティ »

2006/03/14

C#のdelegateをTemplateMethodの代わりに使う

 とある勉強会でC#2.0の新機能を議論する機会があった。
 「匿名メソッド」「イテレータ」について説明を聞いたが、いずれもDelegate、コールバックに関わる。

 イテレータはRubyで言うならば、ブロックそのもの。
例: array.sort{|a, b| b<=>a}

 Perlにも、ハッシュのソートで似たような構文がある。
 Cのクイックソート関数 qsort も比較関数をコールバックに使っている。

 匿名メソッドは、無名Delegateと言ってよい。
 Javaなら、Threadを使ってインナークラスを実装する時とかに似ている。

 C#のDelegateはEventで使うサンプルしか知らないので、自分はまだ理解し切れていないのだが、Delegateの他の例を教えてもらった。
 彼によると、DBコネクションの管理に使ってみる、とのこと。
 つまり、DBコネクションをオープンしてクローズするルーチン処理を行うメソッドの引数に、デレゲートを置き、そのデレゲート内部でSQL発行の処理を行う。
 これってまさにTemplateMethodそのもの。
 こんな使い方があったとは!
 
 C#がJavaと大きく違う所は、Delegateにある。
 Javaならインターフェイスでベタに書かざるを得ない所が、C#ならすっきり書けるが、慣れないと可読性が落ちる。
 コールバックという概念は奥が深い。

|

« Ruby関西が今熱い!~Ruby is Agile! | トップページ | Perl関西はハッカーのコミュニティ »

日記・コラム・つぶやき」カテゴリの記事

プログラミング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: C#のdelegateをTemplateMethodの代わりに使う:

« Ruby関西が今熱い!~Ruby is Agile! | トップページ | Perl関西はハッカーのコミュニティ »