プロが教えるわが家の防犯対策術!

C# 2005で作ってます。

FieldInfo[] fis = form.GetType().GetFields(
BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance);
とすると、継承元のprivateな変数とイベント?が取得されてしまいます。

今まさに操作しているForm内に定義されているprivate変数のみを
取得するにはどういうフラグ設定を行えば良いのでしょうか?

A 回答 (2件)

BindingFlags.DeclaredOnlyを追加してみてはどうでしょうか。



参考URL:http://msdn.microsoft.com/ja-jp/library/system.r …
    • good
    • 0
この回答へのお礼

ありがとうございます。
確かにこれで一部、不要なものを除外することが出来ました。

しかし、画面に貼り付けられているコンポーネントも出力
されてきてしまうのですが、どうにかなるかご存知でしょうか?

やりたいことは、純粋にprivate定義が行われている変数
のみを一覧化したいのですが・・・。
命名ルールでも設けないとダメでしょうか??

お礼日時:2012/07/12 17:27

Formデザイナ上で貼り付けたコンポーネントは,内部ではフィールドを生成します。


これらは,通常のフィールドと変化がありませんし,Reflectionですべて見つかります

Form1.csであればForm1.Designer.csにこれらのフィールドは記述されています。
そのままでは区別する方法はないため,
・書かれているように名前付け規約で解決する
・適当な属性を作ってReflectionで見つけたいフィールドだけに属性を追加する
といった手段を講じる必要があります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
調べまくってたら、FieldInfo.FieldType.Module.ScopeNameが
"CommonLanguageRuntimeLibrary"のものが変数として認識
しているような感じだったので、ひとまずはそれでやってみます。

お礼日時:2012/07/13 10:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!