問題タブ [system.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.
c# - c#入力に基づいてメソッド呼び出しを指定しますか?
ac#プログラムの入力がメソッドの呼び出しを制御できるようにするにはどうすればよいでしょうか。例えば:
デリゲートタイプがあると仮定します。
そして、いくつかの方法:
そして、入力が呼び出し順序を選択できるようにします。
そしてそれをすべて呼び出すコード:
私がこの質問を投稿する理由は、単純なアイデアのように見えるものを実装するのはかなり複雑に見えるからです。この動作を実現する別の方法はリフレクションAPIを使用することですが、それはさらに複雑になります。
asp.net - アセンブリ内の各 Web フォームのコントロールのリストを取得する
リフレクションを使用して Web フォームに存在するコントロールのプレーン テキスト リストを取得することは可能ですか? 基本的に、同僚は検証戦略を定義するのに役立つコントロールのリストを取得しようとしています。たとえば、一般に製品番号は数字でなければなりませんが、特定の画面では英数字にすることができます。リフレクションを使用して次のようなリストを生成するのは簡単だと思いました。
フォーム名は取得できますが、これまでのところ含まれているコントロールは取得できません。現在のコードは次のようになります。
Assembly.CreateInstanceには、いくつかのオーバーロードがあります。たとえば、ページ割り当て行を
ページ ページ = (ページ)assembly.CreateInstance(types[i].FullName, true, BindingFlags.NonPublic, null, null, null, null);
次に、コンストラクターが見つからないというエラーが発生します。
それで、私は完全に間違った道を進んだのでしょうか、それとも私がやろうとしていることは実際にはまったく可能ですか? どんな助けでも大歓迎です。
編集:この質問への回答が遅れたことをお詫びします。Assembly.GetCallingAssembly() を使用してリストを生成する方法を少し進めましたが、まだニーズを完全には満たしていませんでした。最終的には、ソリューション全体を検索する、より長い時間をかけたアプローチを使用しました。
c# - CLR がボックス化された不変値型の変更を許可するのはなぜですか?
シンプルで不変の値の型がある状況があります。
この値の型のインスタンスをボックス化する場合、通常、ボックス化したものはボックス化解除を行ったときに同じ結果になると予想します。驚いたことに、そうではありません。Reflection を使用すると、ボックスに含まれるデータを再初期化することで、誰かがボックスのメモリを簡単に変更できます。
出力例:
ボックスの内容: 013b50a4-451e-4ae8-b0ba-73bdcb0dd612 :: ConsoleApplication1.ImmutableStruct ボックスの内容: 176380e4-d8d8-4b8e-a85e-c29d7f09acd0 :: ConsoleApplication1.ImmutableStruct
(実際には、MSDN に、これが意図された動作であることを示す小さなヒントがあります)
なぜ CLR では、ボックス化された (不変の) 値型をこの微妙な方法で変更できるのでしょうか? readonly が保証されないことはわかっています。また、「従来の」リフレクションを使用すると、値のインスタンスを簡単に変更できることもわかっています。ボックスへの参照がコピーされ、突然変異が予期しない場所に現れると、この動作が問題になります。
私が考えていることの 1 つは、System.Reflection APIobject
のみで動作するため、これにより値型で Reflection を使用できるようになることです。ただし、値の型を使用すると、リフレクションはバラバラになりNullable<>
ます (値がない場合は、null にボックス化されます)。ここでの話は何ですか?
c#-4.0 - 2 つの動的オブジェクト間の多対多の関係を削除するにはどうすればよいですか?
2 つの動的エンティティ間の多対多の関係を削除したいと考えています。
ダミー オブジェクトを使用した例を見たことがありますが、それらは動的ではありませんでした。オブジェクトまたはオブジェクトのコレクション ナビゲーション プロパティの名前は、実行時までわかりません。だから一概には言えませんが、
動的に行う必要があります。何かのようなもの、
拡張メソッドは必ずしも必要ではありません。仕事を成し遂げるためのものだけです。これどうやってするの?ありがとう。
(オブジェクトは動的であるため、他にどのような詳細を提供すると役立つかわかりません。)
data-binding - System.Windows.PropertyPath-このクラスは、ネストされたプロパティ(タイプ)の反映に役立ちますか?
私は最近、主に新しいクラスをインスタンス化し、フィールドにプロパティを設定することを目的として、Reflectionのトピックに取り組んでいます。パスによって...たとえば、パブリックプロパティを持つGamesというクラスがある場合があります-
したがって、たとえば、パスが「GamingProperties.HowToPlay」のプロパティに(リフレクションマジックを使用して)値を設定する必要があります。
これまで、Guy Mahieuの「 PropertyReflector 」クラスを使用してきました。これは必要なことを正確に実行しますが、100,000秒のオブジェクトのリフレクト/デシリアライズに関してはゆっくりです。
少し後で、「式ツリー」(および「 FastReflection 」のようなプロジェクト)を使用することで、プロパティ値をはるかに高速に設定できることがわかりました。しかし、今はFastReflectionができないため、行き詰まりました。ネストされた型に適切に値を設定します。
とにかく-問題は-System.Windows.PropertyPath
これで何とかして私を助けることができるかどうかです。それも関係がありますか?たぶん私は自分のニーズにそれを使用することができますか、または.Binding
(と密接に関連しているSystem.Windows.PropertyPath
)メソッドを使用できますか?
私は明確で、私の質問にあまり乱雑ではないことを願っています。ヒントや提案に感謝します...
c# - C# で ASP.NET MVC コントローラーから静的メソッドを呼び出す方法
ASP .NET MVC コントローラーから呼び出された場合、GetMethod は public static メソッドを検出しません。(コンソール アプリケーションからは正常に動作します)。
このダミーSaveEntityGenericWrapper
メソッドを使用して解決します。
SaveEntityGenericWrapper
コードから削除するには?
ASP .NET MVC 2 コントローラーから呼び出された場合、GetMethod("SaveEntityGeneric")
返されるのnull
に機能するのはなぜですか?GetMethod("SaveEntityGenericWrapper")
SaveEntityGeneric
MVC2 で部分信頼が使用されている場合、プライベートにする方法は?
.net - VB.NETで実行時にクラスのインスタンスオブジェクトの変数を作成します
実行時にオブジェクトを作成した後、クラス内に新しい変数を作成しようとしています。問題は、変数名や値が事前にわからないため、実行時に新しい変数を作成する必要があることです。
たとえば-
編集:これは私のコードのより詳細な説明です。Eval関数でそれを観察した場合、私はを評価しようとしましたFval(abc)
。オブジェクト配列abc
は、その存在が事前にわからないため、Testクラスで宣言されていません。私がやりたいのはabc
、長さ2のオブジェクト配列を作成し、それにいくつかの値を入力することFval(abc)
です。呼び出されると、インデックス1の値が関数の戻り値になりEval
ます。
.net - メソッドが宣言されているインターフェイスを見つける方法
Unity をインターセプトに使用しています。私は多くのインターフェースを持っているので、VirtualMethodInterceptor
. 私の行動では、呼び出されたメソッドが特定のタイプのインターフェイスで(特別な属性で)宣言された場合にのみ反応したいと思います。私は MethodBase.DeclaringType が私の問題を解決すると思っていましたが、私が望んでいたものとは異なる動作をします。実装タイプを返します。
メソッドは複数のインターフェイスで宣言できるため、理にかなっていることに同意できますが、それらのリストを簡単に取得する方法が必要です。残念ながらまだ見つかっていません。
私の問題を示す小さなサンプル
1つの厄介な解決策:
c# - アセンブリ オブジェクトをバイト配列との間でシリアル化/逆シリアル化する方法
コード文字列をコンパイルして、メモリ内に (実行可能な) アセンブリを作成するとします。次に、このアセンブリ オブジェクトをバイト配列にシリアル化し、データベースに格納します。その後、データベースからバイト配列を取得し、バイト配列を逆シリアル化してアセンブリ オブジェクトに戻し、アセンブリのエントリ ポイントを呼び出します。
最初は、.net の他の単純なオブジェクトと同じように、このシリアル化を実行しようとしましたが、アセンブリ オブジェクトでは機能しないようです。アセンブリ オブジェクトには、アセンブリの再インスタンス化に必要なシリアル化データを取得する GetObjectData というメソッドが含まれています。そのため、シナリオでこれらすべてをどのように組み合わせるかについて、私は多少混乱しています。
答えは、アセンブリ オブジェクトを取得し、それをバイト配列に変換し、それをアセンブリに戻してから、逆シリアル化されたアセンブリでエントリ メソッドを実行する方法を示すだけで済みます。
c# - フォームのインスタンス作成時の反射エラー
私は、アセンブリをスキャンし、フォームであるクラスをチェックし、それらが持つメンバーを確認するアプリケーションを試してきました。
アセンブリのクエリに使用しているコードは次のとおりです。
これを使用して、標準フォームを照会しています。
私の問題は、コードが試行したときに次のActivator.CreateInstance(formType)
ような例外が発生"No parameterless constructor defined for this object."
することです。formType をチェックすると、「DeclaringMethod: 'formType.DeclaringMethod' がタイプ 'System.InvalidOperationException'' の例外をスローしたこともわかります」
フォームには標準のコンストラクターがあるため、エラー メッセージがわかりません。本当に明らかな何かが欠けていますか?
EDIT :type.Name
コードがインスタンス化しようとしている型を明らかにしますForm1
。