VB.NET豆知識1_Reflectionを使ってクラスの中の構造体を呼び出す


Reflectionということで水面に映った鳥さんの画像を貼りましたが、残念ながらこの鳥さんは一切関係ありません。悪しからずご了承ください。


普段僕はJavaScriptを書いていることが多いので、VB.NETを触る時に型制限が煩わしく感じることがよくあります。特にPublicで宣言されているClassなどの大きなオブジェクトを、変数に入れた文字列から呼び出したいというような時は型制限のせいで呼び出せなくて大変困ります。

そこでReflectionの出番になります。Reflectionは使い方がややこしいので書いた後はすぐ忘れてしまうのですが、Type型のオブジェクトを取得して、Typeオブジェクトが持っている属性やらフィールドやらメソッドといった中身にアクセスできるようにするみたいな感じだった気がします。使い方は詳しく解説してくれている素晴らしいサイトがたくさんあるのでそちらを御覧ください。

さて、このReflectionを使って文字列からクラスのインスタンスを呼び出し、実装されているメソッドに引数を渡して結果を引き出すことができました。しかし、クラスに実装されている構造体のインスタンスを呼び出そうとした時に壁にぶち当たりました。Typeオブジェクトから目当ての構造体の名前は探し出せるのですが、色々なプロパティやらメソッドやらを試してもどうにも呼び出せない。

結局のところ、Type.GetType("AppliCation.ClassName+StructureName")としてやるとクラスが持っている構造体のTypeオブジェクトを呼び出せました。オブジェクトはFullNameというプロパティを持っていて、それがこういう書き方になるようです。Classの中のStructure中のListを呼び出したい!なんて場合は多分Type.GetType("AppliCation.ClassName+StructureName+ListName")でいけると思います。"+"で繋げばいいということをネット上で見つけることができなかったので、同じようなことで困っている人の助けになれば。

書いていて思うことは「ブラケット表記が恋しい。」これに尽きます。だがNaN、てめーはだめだ。

このブログの人気の投稿

技術メモ「503 Service Unavailable」

グーグルグループのメーリングリストの返信先が個人になってしまう

『ネットワークドライブ』のトラブル