問題タブ [reflection.emit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Reflection.Emit は GetValue および SetValue よりも優れています:S
この方法の方が高速であるため、 PropertyInfo.GetValue / SetValue の代わりに Reflection.Emit を使用するように言われました。しかし、Reflection.Emit の内容と、それを使用して GetValue と SetValue を置き換える方法がよくわかりません。誰でもこれで私を助けることができますか?
c# - デリゲートインスタンスを呼び出すためのILエミット?
基本的に、私はイベント名を文字列として受け入れて、を取得しEventInfo
ます。次に、リフレクションを使用してイベントハンドラータイプとイベント引数タイプを検出し、そのタイプ(myEventHandler
)の新しいデリゲートを作成し、それをイベントにフックします。myEventHandler
呼び出されるたびに、引数をダウンキャストしてハンドラーに渡す必要があります。
私のコードは以下の通りです。「ハンドラー」はmyEventHandler
、「d」が呼び出されるたびに、を介して呼び出す必要があります。???を配置する場所にReflectionがコードを発行する必要があります。何かご意見は?
編集: Reflectorを介した観察に基づいています。
手動でコード化されたシナリオ用にリフレクターで生成されたコードは次のとおりです。
そして、これは私がそれに基づいて試したものです。
しかし、これは実行時エラーを引き起こしています:
「呼び出し規約はvarargsでなければなりません」
おそらく私は何かが足りないので、ILをもっとよく調べる必要があります。
c# - Reflection.emitを使用して明示的なインターフェース実装を発行する方法は?
次の簡単なソース コードを確認します。
以下は、Reflector を使用して A.dll アセンブリを逆コンパイルすることによって得られる同等の C# コードです。
型がインターフェイスを明示的にMyType
実装したい場合はどうすればよいでしょうか? IMyInterface
だから私はこれらの行を取ります:
コメントを切り替えて、次のコードを生成します。
しかし、現在、アプリケーションは動的タイプの作成に失敗しています。この行:
次の例外をスローします。
誰かが私のコードの何が問題なのかを教えてもらえますか?
ありがとう。
.net - F(Type)からFに移行することは可能ですか?振り返りも辞書もなし?
まず、少し紹介します。
私は機能しなければなりません:
を呼び出したいのですがF1(Type)
、これは、指定された型パラメーターに関連する汎用コンテキストに遷移し、対応する汎用コンテキストを呼び出す必要がありますF2<T>
。
単純な実装は、次のような単純な反映になります(わかりやすくするためにバインディングフラグは省略します)。
より高度な実装では、F2のオープンメソッド情報は保存されますtypeof(C).GetMethod("F2")
が、それでも基本的に同じです。
F1
が何度も呼び出され、パフォーマンスを向上させたい場合、「市場に出ている」標準ソリューションは、次のDelegate.CreateDelegate
ような辞書とメソッドを使用します。
そして今、私の質問に。辞書を完全に削除することは可能ですか?
たとえば、TypeインスタンスとF2MethodInfoを受け取り、辞書なしで内部に遷移するReflection.Emitを使用して、いくつかの派手な関数を発行しますか?この派手な関数は一度だけ発行され、任意のタイプで機能する必要があります。この方法で、デリゲートへのキャッシュマッピングタイプを削除できるかどうか疑問に思います。
ありがとう。
編集
この説明のために、ファンシーな出力関数がF2を呼び出す必要があることを知っていると仮定します。つまり、メソッド情報を受け取る必要はありません。それでは辞書を捨てることは可能ですか?
linq - コンパクト フレームワークの ILASM?
Compact Framework で Linq 式ツリー (db4o/Mainsoft/Mono ポートから) を使用しています。System.Reflection.Emit が存在しないため、LambdaExpressions をデリゲートにコンパイルできません。これは、パフォーマンス上の理由から実行したいと考えています。
式ツリーを IL に変換し、不足している Emit 機能を基本的に提供できるのではないかと考えましたが、その上で WinCE ベースの ILASM を実行するか、独自の PE ヘッダーとアセンブリ メタデータを記述する必要があることに気付きました。
私は ILASM を利用できるようにしたいと思っています。それは...ですか?
c# - 動的に作成された型のパフォーマンス
C# を使用して、動的に生成された型と単純な構造体のインスタンスを含むリストを作成するときのパフォーマンスに大きな違いがあることに気付きました。以下のコードには、100,000 個のオブジェクトを含むリストを作成するための 4 つの異なるメソッドが含まれています。
各メソッドのパフォーマンスは異なります。
Button1: 15 ミリ秒
Button2: 31 ミリ秒
ボタン 3 & 4: 300 ミリ秒
ボタン 3 と 4 のコードはこのトピックからのものであることに注意してください
動的に作成されたオブジェクトが遅い理由を誰か説明できますか?
.net - リフレクション IL コード
私は反射が初めてです。親クラスから継承するクラスを作成する必要があります。読み取り専用プロパティを作成する必要があります。このプロパティは、引数 25 を渡すことにより、親クラスの既存の関数を呼び出します。
呼び出される関数に値 25 を渡すことができないことを除いて、すべて正常に動作します。以下は、クラスを生成するコードです。手伝ってください。ありがとう。
c# - デリゲートを使用してコンストラクターを呼び出す
私はこれを見つけましたが、それを使おうとして失敗しました。
リフレクションを使用してオブジェクトを作成し、デリゲートに配置して高速化するにはどうすればよいですか?
デレアージュに入れる前に、少なくともそれを呼び出そうとしましたが、上記を実行するとエラーが発生します
追加情報:呼び出しのターゲットによって例外がスローされました。
代わりにd()を呼び出すと、例外が発生します
no paramコンストラクターをデリゲートに入れて呼び出すにはどうすればよいですか?
c# - C#リフレクション:既存のアセンブリにクラスを出力する
Reflection.Emitを使用して既存のアセンブリに型を作成することは可能ですか、それとも動的型を含めることができるように新しい動的アセンブリを定義する必要がありますか?
基本的に、1つのXML定義ファイルを読み込んで、クラスを定義します。このファイルは、複数回インスタンス化され、他のいくつかのXMLファイルからのデータが入力されます。いくつかのフォルダ(それぞれ異なる定義ファイル)をすすぎ、繰り返します。
また、このデータを使用して、アプリへのインターフェイスを動的に構築し、データをXMLファイルに再保存するときにデータがどのようにフォーマットされるかを定義する予定です。