• ベストアンサー

【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