- - PR -
C#→VB2005 での匿名メソッドについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-03-27 11:00
現在「実践!ソフトウェアアーキテクチャ」(尾島良司氏 著)を参考にしながら、
業務アプリを VB2005 にて開発しているものです。 最初はアーキテクチャを参考にしようと購入しました。 サンプルもあり C# ですが、特にクラスライブラリが使えそうだったので VB へコンバートして使えるようにしようと試みました。 しかし標記の匿名メソッド( delegate ) を多用しており、VB にうまく変換できません。。 Transaction, Trace, Form での EventLog などの処理をやる際に、
のように使っており、RXForBusiness のメソッドから処理をつけて、 Trace の開始・終了や TransactionScope で、引数でつけた処理を挟んでいます。 VB で変換するには厳しいでしょうか? もし上記本を参考にした方はアドバイス下さい。宜しくお願いします。 [ メッセージ編集済み 編集者: あー 編集日時 2009-03-27 11:07 ] [ メッセージ編集済み 編集者: あー 編集日時 2009-03-27 11:08 ] | ||||||||||||
|
投稿日時: 2009-03-27 11:47
本ももってない上にどっちかといえばC#の人なので自信はありませんが、 delegateというかRXForBusiness.TraceInAndOut() はActionを引数にとっていると思います その場合、単純なケースでは以下のような書き方で変換が可能です。
ただ、今回のケースではdataSetメンバへの参照が問題となりますので、 問題があればRxなんとかともどもAction(Of DataSet)に変更することを検討してください。 (この場合DelegateHoge内でdataSetメンバにアクセスするとどうなるかは確認してません) [ メッセージ編集済み 編集者: デューン 編集日時 2009-03-27 11:49 ] | ||||||||||||
|
投稿日時: 2009-03-27 11:52
VB2005 だと匿名メソッドはサポートされていませんので、ちゃんとメソッドを用意する必要があります。
結構面倒なので、簡単になるよう工夫すると良いと思います。 工夫の仕方は色々あると思いますが、例えば RXForBusiness.cs に次のようなメソッドを追加しておけば、
次のようにメソッドを一つ減らすことができます。
_________________ C#と諸々 | ||||||||||||
|
投稿日時: 2009-03-27 13:46
昔本屋でちょっと見てみただけなので詳細は覚えてませんが、
あの本では、匿名メソッドを利用することで、Before Afterパターン的な処理などを 簡潔に記述する、という趣旨だったはずです。 で、当然匿名メソッドが使えることが大前提で、使えないVBでは簡潔どころか複雑化するだけでほとんど意味がありません。 使おうと思えばメソッドを切り出したりして使えますが、あえてやる意味はないでしょう。 | ||||||||||||
|
投稿日時: 2009-03-27 16:31
手元にあるので見てみましたが、一々継承などを使わずとも制御の逆転を実現できるよ、という視点で書かれてました。 もちろん、匿名メソッドが使える場合に比べて遥かに見劣りしますが、 読みやすさ以外のメリットまでは損なわれないので、 決して意味がないわけではないかなと思います。 # まぁ、読みにくさによるデメリットが大きいんじゃ、割に合わないかもしれませんが _________________ C#と諸々 |
1