[VB.NET] CallByName 使いどころ

VisualBasic.NETには、CallByNameという関数がある。
リフレクションという物の簡易版で、実行時に文字列から、プロパティ名やメソッド名を指定できる。

まぁ、ざっくりとコードをかく。(テストコードの環境は、ASP.NET)
まず、Hotelというクラスがあるとする。

このとき、プロパティやメソッドにアクセスする際に、文字列から指定できる。

CallByNameの第一引数にオブジェクトを渡し、第二引数にプロパティ名やメソッド名を入れて、第三引数に、プロパティのGetなのかSetなのかメソッドなのかを入れる。(Letってもあるが多分使わない)

基本的に、CallByNameは、普通にアクセスしたときより遅く、わざわざ使うメリットはない。
主に、デバッグ等の開発のお助け等々で使用されるだけである。

が、たまに使える時がある。

それは、ため息が出るような数字の連続に出会った時などである。

「ホテルクラスに部屋名を持たせたい。」
「小さいホテルだし10部屋ほどかな。」

そして、下記のようなものがHotelクラスに追加され既に運用されている。

このような、コードで延々と書かれているときは、CallByNameが役に立つ。

if文やwhile文でひたすら分岐させる方法で書くと下記のようになる

3つだから、いいが、部屋数が10個も20個もあると発狂しそうになる。

配列やリストに入れるなりで書き直したくなるが、すでに運用されてたり、データベース等と連携してデータベースのほうも1,2,3という悲惨な状態だと、手が付けられない。
さらにこれに部屋ごとの情報を入れたいとかなると、RooNameInfo1、RooNameInfo2などとなると・・・・。

そんな時に、文字列から直接アクセスできるCallByNameが重宝する。

さきほどの関数を書きなおすと、

一行で済む。

もちろん、動作は遅くなるとは思うが、刺身にタンポポ乗せるような作業を、手作業でやるようなこと精神衛生上よろしくない。

 

参考:
http://msdn.microsoft.com/ja-jp/library/chsc1tx6%28v=vs.90%29.aspx

http://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.interaction.callbyname%28v=vs.110%29.aspx

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">