2009-06-12 2 views
1

Reflection.Emit名前空間を使用してフィールドを削除し、それを自分のProperty実装に置き換える方法を見つけようとしています。 Emitを使ってコードを生成し、ILコードを直接コンパイルしてコンパイルする方法については読んできましたが、Reflection.Emit名前空間を使用して置換や削除を行う方法の例は見ていません。誰も私にそれらの行に沿って何かの例を見せてもらえますか?FieldをSystem.Reflection.Emit名前空間を使用してPropertyに置き換えますか?

ありがとうございました。

答えて

2

これはCLRでは不可能です。私はあなたが一度それが読み込まれたタイプを修正することができるとは思わない。プロパティをどのように使用するかによって、カスタムTypeDescriptor(コンポーネントはこれを使用してWindowsフォームのツールチップコンポーネントなどのプロパティを動的に拡張します)を使用するか、DependencyPropertyを使用できる可能性があります。しかし、ロードされたタイプの新しいメンバーや変更されたメンバーへの普通の古いバインディングに関しては、それは可能だとは思わない。

アセンブリをAppDomainにロードする前にAssembly.ReflectionOnlyLoadFromを使用してDLLをロードし、メモリ内に動的に生成された型の新しい型を発行して読み込むのはなぜですか?

+0

私はまた、などの分野、ハッシュテーブルを変更することができますプロパティグリッド型制御に取り組んでいます。しかし、私は現在、とき、フィールド通知され、任意の方法を持っていない、または基本的に何でもが変更されました私のコントロールの外にはプロパティが必要です。したがって、ユーザーが選択したオブジェクトを自分のコントロールに設定すると、フィールドをプロパティに置き換えて通知用のロジックを定義したいと思っています...その長いショットですが、これを行うためにはいくらかの方法があります... – Thrash505

+0

IPropertyChangedは1つの概念です。 http://www.msnewsgroups.net/group/microsoft.public.dotnet.languages.csharp/topic36704.aspx – eschneider

+0

選択したオブジェクトを取得し、メモリに基づいて新しいタイプを作成し、カスタムを実装することは可能ですか古いタイプの古いアソシエーションをすべて破棄し、新しいタイプと再リンクしますか?私はTypeDescriptorsのメンバーを見ていましたが、私はAssociationのメソッドの束を見ました...彼らは使用するかもしれないと思った。 – Thrash505

1

PostsharpでAspect Oriented Programmingを調べてみるとよいでしょう。

私はPostsharpを使用したことがないので、私はあなたがこれを実現する方法を正確には何の具体的なアイデアを持っていません。しかし、これはPostsharp(プロパティやフィールドのプレ/ポストアクセスを実行するためのコードの設定)でできると聞いたことのあるものと驚くほどよく似ています。

http://www.postsharp.org/

+0

PostSharpを調べる場合は、そのウィーバーを見てください。 LAOS(Lightweight Aspect Oriented System)では、既存のメソッド、プロパティなどにビヘイビアを追加することができますが、フィールドをプロパティに置き換えるには、低レベルの織りを使用する必要があります。 – jrista

関連する問題