• ベストアンサー

【C#】private変数名を取得したい

C# 2005で作ってます。 FieldInfo[] fis = form.GetType().GetFields( BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance); とすると、継承元のprivateな変数とイベント?が取得されてしまいます。 今まさに操作しているForm内に定義されているprivate変数のみを 取得するにはどういうフラグ設定を行えば良いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

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

参考URL:
http://msdn.microsoft.com/ja-jp/library/system.reflection.bindingflags.aspx
naktak
質問者

お礼

ありがとうございます。 確かにこれで一部、不要なものを除外することが出来ました。 しかし、画面に貼り付けられているコンポーネントも出力 されてきてしまうのですが、どうにかなるかご存知でしょうか? やりたいことは、純粋にprivate定義が行われている変数 のみを一覧化したいのですが・・・。 命名ルールでも設けないとダメでしょうか??

その他の回答 (1)

回答No.2

Formデザイナ上で貼り付けたコンポーネントは,内部ではフィールドを生成します。 これらは,通常のフィールドと変化がありませんし,Reflectionですべて見つかります Form1.csであればForm1.Designer.csにこれらのフィールドは記述されています。 そのままでは区別する方法はないため, ・書かれているように名前付け規約で解決する ・適当な属性を作ってReflectionで見つけたいフィールドだけに属性を追加する といった手段を講じる必要があります。

naktak
質問者

お礼

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

関連するQ&A