タグ

2009年10月15日のブックマーク (2件)

  • System.Reflection.Emitについて (1)(HelloWorldみたいなもの) (AssemblyBuilder, ModuleBuilder, TypeBuilder, ILGenerator, MSIL) - いろいろ備忘録日記

    以下、自分のメモ書きです。 System.Reflection.Emit名前空間に存在するクラス達は、実行時に動的に型を生成するための 機能を持ちます。同じように実行時生成としては、CodeDOMもありますが、Emitは型を特定の アセンブリ上に動的に生成する際に、直接ILコードを設定します。なのでコンパイルする手順が 省けます。その代わり、ある程度のILコードに対して知識が必要となります。 でも、実際には細かくしっていなければならない訳では決してなく(実は私もほとんど分かりません(笑)) 以下のようにして、どんなILコードを設定すればいいのかを予め調べておきます。 サンプルソースを記述する。 一旦それをビルド。 生成されたアセンブリをildasm.exeに掛けて、どんなオペコードが吐かれるのかを確認。 同じオペコードを実際に動的生成する型に対して設定する。 上記のようにすると、シンプルな

    System.Reflection.Emitについて (1)(HelloWorldみたいなもの) (AssemblyBuilder, ModuleBuilder, TypeBuilder, ILGenerator, MSIL) - いろいろ備忘録日記
  • クラスの動的生成 - しがないプログラマ の日記

    久しぶりに.NETのプログラムを話題を。 .NET2.0でDataGridViewというデータをGridを表示するコントロールがありまして、そこにデータのEntityを自動的にBindするために BindingSourceというコントロールが用意されています。これを使うとデータクラスのプロパティをGridの列にBindしてくれる優れものなのです。ついでに、この自動Bindingにはプロパティ名を使ったリフレクションが使われています。 そんな前置きがありつつ、今回はこの列を動的に変えたいと思ったわけです。 さて、ここからが題です。それなら動的にプロパティを増やせるクラスを用意できれば、あとは BindingSourceが面倒見てくれるのでは?と考えて実行してみました。結論から言えば、大成功でした。その方法ですが、.NET Frameworkのリフレクションを使うとアセンブリを動的に生成でき

    クラスの動的生成 - しがないプログラマ の日記