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#ならすっきり書けるが、慣れないと可読性が落ちる。
コールバックという概念は奥が深い。
| 固定リンク
「日記・コラム・つぶやき」カテゴリの記事
- 考えながら書く人のためのScrivener入門の感想(2020.12.06)
- 課題は問題点をひっくり返す表現だけで良い場合もある(2020.09.28)
- ツールを使いこなせる事の重要性が増している(2020.05.28)
- ココログHTTPS化のメモ(2019.12.26)
- 「小水力発電が地域を救う」の感想(2018.04.06)
「プログラミング」カテゴリの記事
- Ruby技術者認定試験の感想(2020.05.08)
- 前処理大全の良いところ~SQLとRとPythonで対比できる(2019.07.10)
- WinSCPでトンネリングする方法のリンク(2018.09.09)
- 仕様書にもExcel脱却が求められている(2017.12.23)
- ソフトウェアの複雑性は本質的な性質であって偶有的なものではない(2017.05.05)
コメント