問題タブ [methodinfo]

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.

0 投票する
1 に答える
1712 参照

c# - デリゲートに対する MethodInfo のチェック

MethodInfo が異なるデリゲート タイプに適合するかどうかを判断するにはどうすればよいですか?

編集:私は MethodInfo オブジェクトを与えられており、それがデリゲート インターフェイスに適合するかどうかを知りたいです。明らかなことは別として

0 投票する
2 に答える
697 参照

c# - MethodInfo.Invoke からの例外で VS2010 が常に中断するのはなぜですか?

MethodInfo.Invoke(o,null) の周りに try/catch があり、VS2010 は例外で中断しないように設定されていますが、残念ながら、デバッガーは Invoked メソッド内で中断し続けます。メソッドは静的で、Phone Developer Beta がインストールされています。

これはバグですか、それとも開発者のエラーですか?

どうも!!

0 投票する
2 に答える
2815 参照

c# - リフレクションを使用して、特定のカスタム属性を持つすべてのメソッドを呼び出すにはどうすればよいですか?

私はたくさんのメソッドを持つクラスを持っています。

これらのメソッドの一部は、カスタム属性によってマークされています。

これらすべてのメソッドを一度に呼び出したいと思います。

リフレクションを使用して、この属性を含むクラス内のすべてのメソッドのリストを見つけるにはどうすればよいでしょうか?

0 投票する
6 に答える
20260 参照

.net - Func を取得できますか(または同様の) MethodInfo オブジェクトから?

一般的に言えば、リフレクションを使用するとパフォーマンスに影響があることを認識しています。(実際、私自身は反省のファンではありません。これは純粋に学術的な質問です。)

次のようなクラスが存在するとします。

ここで我慢してください。MyClass呼び出された のインスタンスがあればx、 を呼び出すことができることを知っていますx.GetName()。さらに、Func<string>変数を に設定できますx.GetName

ここで私の質問です。上記のクラスが呼び出されていることを知らないとしましょうMyClass。あるオブジェクトを持っていますがx、それが何であるかわかりません。GetNameこれを行うことで、そのオブジェクトにメソッドがあるかどうかを確認できます。

nullgetNameではないとします。getName.ReturnType == typeof(string)次に、さらに ifとをチェックすることはできませんでしたか? この時点で、オブジェクトによって表されるメソッドが何らかの方法で , に確実にキャストできるgetName.GetParameters().Length == 0と確信できませんか?getNameFunc<string>

があることに気付きました。また、次のようなものをいつでも作成MethodInfo.Invokeできることにも気付きました。Func<string>

私が求めているのは、オブジェクトからそれが表す実際のメソッドに移動し、 processでリフレクションのパフォーマンス コストが発生する方法があるかどうかだと思いますが、その後はメソッドを直接呼び出すことができます (たとえば、 aまたは類似のもの)パフォーマンスの低下なし。MethodInfoFunc<string>

私が想定しているのは、次のようなものです。

(私はそれが存在しないことを理解しています;私はそのようなものがあるかどうか疑問に思っています.)

0 投票する
2 に答える
15244 参照

.net - MethodInfo から Action デリゲートを作成するにはどうすればよいですか?

MethodInfo オブジェクトからアクション デリゲートを取得したいと考えています。これは可能ですか?

0 投票する
2 に答える
2175 参照

c# - キャッチできない例外、pt 2

更新: Microsoft Connect でバグ レポートを提出しました: https://connect.microsoft.com/VisualStudio/feedback/details/568271/debugger-halting-on-exception-thrown-inside-methodinfo-invoke#details

お使いのマシンでこの問題を再現できる場合は、修正できるようにバグに賛成票を投じてください!


OK、いくつかのテストを行い、問題を非常に単純なものに減らしました。

私。例外をスローする新しいクラスにメソッドを作成します。

ii. このメソッドを別の場所で指す MethodInfo を作成します。

iii. Invoke() の呼び出しを try/catch ブロックでラップします。

iv。デバッガーなしでプログラムを実行します (正常に動作します)。

v. デバッガーでプログラムを実行します。デバッガーは、例外を無視しようとするキャッチ ハンドラーでラップされている場合でも、例外が発生するとプログラムを停止します。(catch ブロックにブレークポイントを置いても、到達する前に停止します!)

実際、デバッガーなしで実行すると例外が発生します。単純なテスト プロジェクトでは、他のレベルでは無視されますが、アプリに何らかの種類のグローバルな例外処理がある場合は、そこでもトリガーされます。 [コメントを見る]

これは、デバッグしようとする苦痛は言うまでもなく、アプリのクラッシュハンドラーをトリガーし続けるため、本当に頭痛の種です。

0 投票する
2 に答える
832 参照

.net - .NET MethodInfo キャッシュをクリアまたは無効にすることはできますか?

MSDNによると、呼び出しは反映されたメソッド情報をキャッシュに保存するため、コストのかかる操作を再度実行する必要はありません。Type.GetMethods()MemberInfo

特定の仕様に一致するメソッドを探して、アセンブリ/型をスキャンするアプリケーションがあります。問題は、.NET がメソッド メタデータに依存するため、メモリ消費が大幅に増加することです (特に、参照されるアセンブリが多数ある場合)。

MemberInfoこのキャッシュをクリアまたは無効にする方法はありますか?

0 投票する
1 に答える
804 参照

c# - ac#メソッドをトラバースし、メソッド本体をanazlyeします

C#でmethodinfoをトラバースする最も簡単な方法は何ですか?

メソッド本体をトラバースしてフィールド参照などを見つけ、型を取得したいと思います。

System.Reflectionには次のものがあります。

これはちょっと低レベルで、体を横断する前に「いくらかの」作業が必要になります。

Cecilが存在することは知っていますが、メモリ内のアセンブリをcecilでロードする際に問題があります。私が使用しているアセンブリは、常に「ディスク上」にあるとは限りません。たとえば、からコンパイルされたメモリ内アセンブリである可能性があります。ブー、そして私はアセンブリを一時的にディスクに書き込むことなしにクリーンな解決策を望んでいません。

これには他にどのような選択肢がありますか?

0 投票する
1 に答える
653 参照

c# - Reflection.Emitを使用して、スタック上のMethodInfoインスタンスを使用してメソッドを呼び出します。

Reflection.Emitを使用して、数式パーサーを作成しています(例2+2)。クラスは中置式(eg 2+2)を受け取り、それを後置式(eg)に変換し、2 2 +次に別のクラスがその後置式をILにコンパイルして、を作成しDynamicMethodます。そこから、式はコンパイル時に作成されたかのように、同様の速度で評価できます。

このコンパイラは暗黙の乗算もサポートしているため、次のようにx(2 + 2)評価されます。x * (2 + 2)

現在、ユーザー定義関数(eg f(x))を実装しようとしています。上記のような暗黙の乗算とユーザー定義関数を区別しようとすると、問題が発生します。この例は、ユーザーが入力した場合、を乗算するか、引数を指定して関数を呼び出すx(5)かをどのように知ることができますか?x5x5

これを解決するために、前のケースでは、コンパイラーはifステートメントをILストリームに挿入します。関数を呼び出して、関数がの識別子で定義されているかどうかを判別しますx。存在する場合は、変数とローカルMethodInfoを介してインスタンスをスタックに挿入します。out

私の実際の質問は、コンパイル中のMethodInfo呼び出しと同等の速度でスタック上のインスタンスを使用してメソッドを実行することは可能ですか?IlGenerator.Emit(OpCodes.Call, MethodInfo)

ありがとう。

0 投票する
3 に答える
7421 参照

c# - System.Reflection.MethodInfo.Invokeおよび複数のスレッド

こんにちは、スレッド付きのパラメータを使用してSystem.Reflection.MethodInfo.Invoke()を呼び出すにはどうすればよいですか。

例えば..

クラス名を表す文字列を渡して、対応するクラスメソッドを動的に呼び出すことができるメソッドがあるとしましょう。今度は、このMethodinfo.invokeをスレッドで呼び出したいのですが、invokeを呼び出しているので、これを行う方法がわかりません。パラメータ付き。meblowを指定したコードスニペット。ご協力ありがとうございました