問題タブ [fieldinfo]
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# - オブジェクトの状態を反映するすべての MemberInfo を取得する最も簡単な方法は?
リフレクションを使用して、オブジェクトの正確な状態を表すすべてのメンバーを取得する必要があります。したがって、これらのメンバーにはフィールド ( FieldInfo
) と自動プロパティ ( PropertyInfo
) が含まれます。を使用してすべてのFieldInfo
s を取得できます
このリンクに記載されているように、自動実装されたプロパティを取得します。
回答者が言うように、これは確かに脆いです。これを達成するためのより標準的な方法はありますか?私は考えています、多分何かとBindingFlags
そうですか?
.net - BindingFlags 列挙型の GetField、SetField、GetProperty、および SetProperty とは何ですか?
これらが何のためにあるのかわかりません。ドキュメントはあまり明確ではありません:
GetField指定されたフィールドの値が返されるように指定します。
SetField指定したフィールドの値を設定する必要があることを指定します。
GetProperty指定されたプロパティの値を返す必要があることを指定します。
SetProperty指定したプロパティの値を設定する必要があることを指定します。COM プロパティの場合、このバインド フラグを指定することは、PutDispProperty および PutRefDispProperty を指定することと同じです。
それらをBindingFlags
列挙で指定すると、何を返す必要がありますか? タイプのプロパティとフィールドに関係していると思いましたが、この簡単なテストではノーと言われています:
SetField
、GetProperty
およびに対して同じセットが返されSetProperty
ます。
c# - リフレクションC#を介してイベントを見つける
C# のイベントとリフレクションに関する問題があります。現在、Microsoft Kinect (SDK 1.7) を使用してプログラミングを行っており、「プッシュ ツー プレス」アプローチとは異なるクリックを実装したいと考えています。ClickEvent 自体は KinectControl クラスで宣言されています。
この ClickEvent を発生させて適切なメソッドを呼び出すコントロールは、KinectControl クラスから継承する「Menu_Point」オブジェクトです。
クリック ジェスチャを認識した後、「ソース」のそれぞれの「Menu_Point」オブジェクトは、次のように ClickEvent を発生させます。
次のメソッドを呼び出します。
Raise メソッドが呼び出されて次の行
に到達するまでは問題なく動作します。FieldInfo fieldInfo =
source.GetType().GetField(eventName, BindingFlags.Public |
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static |
BindingFlags.GetField);
理由はわかりませんが、fieldInfo が常に残っているため、アクセスしようとするとnull
例外が発生します。eventDelegate
残念ながら、この場合 ClickEvent が見つからない理由を見つけることができません。メンバーeventName
には、KinectControl クラスのイベントの名前である値「Click」があります。また、このサイトで回答を検索しましたが (ただし、これまでのところ解決策はありませんでした)、DotNetPearls.com などのあらゆる種類のブログを読みましたが、それでもここで間違いを見つけることができないようです。あなたが私を助けてくれることを願っています。前もって感謝します!
編集:追加BindingFlags.Static
; FieldInfo でそれを忘れていました。ありがとう@Michael Gunter。それでもうまくいきません。
c# - System.Reflection GetNestetTypes 宣言されたすべてのフィールドの名前または値
ネストされたすべてのクラス内のすべてのフィールドのリストを取得する方法
私が使用しようとしているコードは、ここの投稿の 1 つからのものです。これを 2 つまたは 3 つのコード行に分割することができます。
これは、名前や値ではなくfieldInfoを返します。文字列のリストとして、またはフィールド値と名前の両方の辞書として必要ですが、今のところリストで十分です。
ありがとう。
c# - MemberInfo.GetCustomAttributes(Type) が属性の配列を返すように定義されているのはなぜですか?
を持っているとFieldInfo
します。次の 2 つの方法があります。
それはいいです。
しかし、以下のものは?[]
ではなく返されます。Attribute
この質問は、MS の設計上の選択に関するものではありません。field.GetCustomAttributes
私の質問は、特定の属性タイプに対して複数のアイテムを返すことについて心配する必要がありますか? それはどのような場合に起こりますか?
私が推測することは決して不可能です。いくつかのリフレクション ヘルパー関数を記述するときに、これを処理する必要があると思います。
c# - フィールド/プロパティ パスを解析しますか?
そこで、オブジェクトからプロパティ パスを解析し、必要なプロパティを返し、返されたプロパティを呼び出すことができるオブジェクトstart
の out パラメータを取得するコードを作成しました。source
ここで、次の階層があるとしましょう。
使用例:
私の質問は次のとおりです。これは明らかにプロパティに対してのみ機能します。プロパティとフィールドの両方で機能させるにはどうすればよいですか? - 問題は、と の間でMemberInfo
共通ですが、 がないため、 を返すことができません。式について読んでいますが、ここでどのように役立つかわかりません...FieldInfo
PropertyInfo
GetValue
MemberInfo
繰り返しますが、私が探しているのは (ソースが与えられた場合) 以下を解析する機能です: X.Y.Z
X、Y、Z はプロパティまたはフィールドである可能性があります。
編集:
だから私はコードを少し変更して、私が望んでいたことを行いました-しかし、それはあなたがきしむようなきれいなコードと呼ぶものではなく、出力パラメータが多すぎます:
使用法:
それは私が望む解析を行いますが、もっと良いものがあるはずです...
c# - メンバーが宣言されている順序でクラスの MemberInfos を取得するにはどうすればよいですか?
次のクラスがあるとしましょう:
私がする場合:
field1
( then )で宣言されている順序でフィールドを取得しますfield2
。やったら同じことGetProperties
ここで、次のことを検討してください。
私がしたとき:
次の出力が得られました。
明らかに、メンバーが宣言されている順序ではありません (つまりfield1
、 、Prop1
、field2
およびProp2
) 。
メンバーをその順序で取得する方法はありますか?
ありがとう。
編集:
私は Unity3D (ゲーム エンジン) を使用しており、特定のタイプのカスタム エディターを作成しているため、順序が気になります。型にはフィールドとプロパティがあります。フィールド/プロパティを宣言されている順序で描画したいと思います。もちろん、ユニティは宣言されている順序でフィールドを描画しますが、プロパティは描画しません. そのため、プロパティの描画をサポートする独自のドロワー/エディターを作成しています。
c# - C# FieldInfo オブジェクト内の型と値を取得するにはどうすればよいですか?
これに対する解決策を見つけようとしましたが、できません。次のクラスとプログラムが与えられます。
Class1.SomeClass のプロパティとフィールドを設定した場合、Class1 をシリアル化し、SomeClass の名前/値を次のように表示するにはどうすればよいですか。
GetType() と GetValue() を使用してカスタム型ではない他の静的型の FieldInfo と PropertyInfo から名前/値を取得できますが、この場合、FieldInfo (間違っていなければ) はこのカスタム型のメタデータです。 、しかし、その中にあるメンバー型の名前と値を取得する方法がわかりません。
これが理にかなっていることを願っています...