Reflection.Emit 名前空間を使用してフィールドを削除し、独自の Property 実装に置き換える方法を見つけようとしています。Emit を使用してコードを生成し、IL コードを直接記述してコンパイルする方法について読んできましたが、Reflection.Emit 名前空間を使用して置換または削除を行う方法の例を見たことがありません。誰かがそれらの線に沿った何かの例を見せてもらえますか?
ありがとう。
Reflection.Emit 名前空間を使用してフィールドを削除し、独自の Property 実装に置き換える方法を見つけようとしています。Emit を使用してコードを生成し、IL コードを直接記述してコンパイルする方法について読んできましたが、Reflection.Emit 名前空間を使用して置換または削除を行う方法の例を見たことがありません。誰かがそれらの線に沿った何かの例を見せてもらえますか?
ありがとう。
私の知る限り、これは CLR では不可能です。ロードされたタイプを修正できるとは思いません。プロパティの使用方法に応じて、カスタム TypeDescriptor (コンポーネントはこれを使用して、Windows フォームの ToolTip コンポーネントなどのプロパティを動的に拡張します) を使用するか、DependencyProperty を使用できる場合があります。しかし、ロードされた型の新しいメンバーまたは変更されたメンバーへの単純な古い遅延バインディングについては、それが可能だとは思いません。
Assembly.ReflectionOnlyLoadFrom を使用してアセンブリを AppDomain にロードする前に DLL をロードしてから、メモリ内で動的に生成された型を使用して新しい型を発行し、それをロードしないのはなぜですか?
Postsharp を使用した Aspect Oriented Programming を調べてみてください。
私は Postsharp を使用したことがないので、これをどのように正確に達成できるかについて具体的な考えはありません。ただし、これは、Postsharp で実行できると聞いたいくつかのことと非常に似ているように思えます (プロパティまたはフィールドの事前/事後アクセスを実行するコードをセットアップします)。