問題タブ [reflection]
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.
javascript - protocol.constructor.applyを呼び出してJavaScriptオブジェクトをインスタンス化する
私がやろうとしていることの具体例から始めましょう。
の形式で、年、月、日、時、分、秒、ミリ秒のコンポーネントの配列があります[ 2008, 10, 8, 00, 16, 34, 254 ]
。次の標準コンストラクターを使用してDateオブジェクトをインスタンス化したいと思います。
配列をこのコンストラクターに渡して、新しいDateインスタンスを取得するにはどうすればよいですか?[更新:私の質問は実際にはこの特定の例を超えています。Date、Array、RegExpなどのコンストラクターが私の手の届かないところにある組み込みのJavaScriptクラスの一般的なソリューションが欲しいのですが。]
私は次のようなことをしようとしています:
おそらくnew
どこかに「」が必要です。上記は、「(new Date()).toString()
」と呼んだかのように現在の時刻を返すだけです。私はまた、私が上記で完全に間違った方向にいる可能性があることを認めます:)
注:eval()
配列項目に1つずつアクセスすることはできません。アレイをそのまま使用できるはずです。
更新:さらなる実験
まだ誰も実用的な答えを思い付くことができていないので、私はもっと遊んでいます。これが新しい発見です。
私は自分のクラスでこれを行うことができます:
ただし、組み込みのDateクラスでは機能しません。
Numberでも機能しません:
たぶん、これは組み込みオブジェクトでは不可能ですか?FirefoxBTWでテストしています。
c# - Reflection.Net:依存関係をロードする方法は?
Reflection を使用して Windows.Net アプリケーションにアドオン システムを追加しようとしています。ただし、依存関係のあるアドオンがあると失敗します。
アドオン クラスは、インターフェイス 'IAddon' を実装し、空のコンストラクターを持つ必要があります。
メイン プログラムは、Reflection を使用してアドオンをロードします。
アドオンが依存関係を使用しない場合にうまく機能します。しかし、アドオンがディスクのアドオンの近くに保存されている別の DLL (C:\Temp\TestAddon\MyTools.dll) を参照して使用すると、失敗します:
System.IO.FileNotFoundException: ファイルまたはアセンブリ 'MyTools.dll を読み込めませんでした' またはその依存関係の 1 つ。
アドオン DLL を実行可能ファイルの近くにコピーしたくありません。.Net ランタイムに "C:\Temp\TestAddon\" で依存関係を検索するように指示するにはどうすればよいですか?
追加することに注意してください
何も変更しないでください。
java - メソッドの戻り値の型が List と一致するかどうかをテストする方法
指定されたメソッド (つまり、java.lang.Method インスタンス) に List<String> に安全にキャストできる戻り値の型があるかどうかを (リフレクションを使用して) テストする最も簡単な方法は何ですか?
次のスニペットを検討してください。
方法 1、2、3 はすべて要件を満たしています。(ParameterizedType のインスタンスを返す getGenericReturnType() を使用して) method1 をテストするのは非常に簡単ですが、method2 と 3 についてはそれほど明白ではありません。すべての getGenericSuperclass() と getGenericInterfaces() をトラバースすることで、かなり近づけることができると思いますが、List<E> の TypeVariable (スーパークラス インターフェイスのどこかで発生) を実際のtype パラメーター (つまり、この E が String に一致する場所)。
それとも、私が見落としている完全に異なる(より簡単な)方法がありますか?
EDIT:それを調べている人のために、ここにmethod4があります。これも要件を満たし、調査する必要があるいくつかのケースを示しています:
java - java.beans.Introspector getBeanInfo がスーパーインターフェースのプロパティを取得しない
java.beans.Introspector getBeanInfo がスーパーインターフェースのプロパティを取得していないことに気付きました。例:
名前が Person から継承されていても、Employee をイントロスペクトすると給与しか得られません。
どうしてこれなの?すべてのゲッターを取得するためにリフレクションを使用する必要はありません。
.net - アセンブリ属性の読み方
私のプログラムでは、AssemblyInfo.cs で設定されたプロパティをどのように読み取ることができますか?
これらの値の一部を自分のプログラムのユーザーに表示したいので、メイン プログラムと使用しているコンポーネント アセンブリから値を読み込む方法を知りたいです。
c# - クラス プロパティにパブリック セット (.NET) があるかどうかを確認するにはどうすればよいですか?
私はこれを持っています:
そして、データバインディング用の私のユーティリティクラスはこれを行います:
ただし、PropertyInfo.CanWrite は、セットがパブリックにアクセス可能かどうかは気にせず、存在することだけを気にします。
セットだけでなく、公開セットがあるかどうかを判断するにはどうすればよいですか?
api - リフレクションによるメソッド パラメータ値
リフレクションを使用してメソッドのパラメーターをログに記録しようとしています。StackOverflow でこの問題について投稿された以前の質問も読んで、 CLR API を指摘しました。
APIを使用して渡されたパラメータの値をどのように取得するかについて、誰かが私を正しい方向に向けることができますか?
.net - リフレクション付きの.NET動的オブジェクト
Nullable(of Enum)
aが実際Enum
にリフレクションによってであるかどうかを判断するにはどうすればよいですか?
私は、データベース呼び出しから取得したT
タイプのオブジェクトに動的にデータを取り込むメソッドを使用しています。IDataReader
基本的に、データリーダーの序数をループし、序T
数の名前に一致するすべてのプロパティとプロパティにデータを入力します(列名を変更するために属性マジックもスローされます)。他のすべての状況ではうまく機能しますが、プロパティをチェックするBaseType
とSystem.Enum
、代わりに見つけることができます。System.ValueType
したがって、列挙型チェックが失敗し、メソッドが爆破されます。
[編集:
Type.IsEnum
必要な方法で機能しません。ここでの主な問題は、T
のBaseType階層には、それがであるとは何も書かれていないということですEnum
。それをNullable
タイプにすることは私のEnum
権利を失うかのようです。]
何か案は?
c# - 高性能で堅牢なリフレクション キャッシュを作成するには、どのようなことを行う必要がありますか?
.NET 3.5 では、System.Reflection を使用して AOP (おそらく Castle のウィンザー インターセプターのコンテキストで) を使用して、メソッド レベルで実行する必要があるセキュリティ アクションを定義するなどの作業を行う予定です。 Reflection の一部が遅いと聞き (MSDN の記事を読んだことがあります)、これらの部分をキャッシュしたいと考えています (製品コードに近づいたら、ともかく)。私のアプローチを検証したいと思います:
- キャッシュ キーは {type} + {大文字と小文字を区別するメソッド名} + {パラメーター タイプのリスト} です。
- キャッシュ キー オブジェクトは、Equals 操作を介して比較できます
- キャッシュ ペイロードは {MethodInfo} + {メソッドで定義されたカスタム属性のリスト} です。
- キャッシュは、コンストラクター注入を介してインターセプターに注入されます
- キャッシュは長期間維持できます (自己変更コードを書くつもりはないという仮定に基づいています ;-) )
アップデート:
自分で書いたリフレクションを介してメソッドを呼び出すつもりはありません。(現時点では)機能を注入したい属性の属性を調べてください。ここで、属性は注入する動作を定義します。私のインターセプターは、現時点では、変更する理由がわかるまで、Castle の Windsor IInterceptor メカニズムを使用する予定です。
.net - アセンブリが正しく保存されない
アセンブリを生成し、含まれている型でメソッドを呼び出すための非常に単純なコードがいくつかあります。メソッドが呼び出されて正しく実行されますが、Reflector を使用して生成されたアセンブリを表示すると、型が表示されません。
以下はサンプルコードです。
ここに、Reflector からの対応する逆アセンブリがあります。
... と ...
アセンブリを適切に保存するのを手伝ってくれる人はいますか?