- ベストアンサー
【C#】private変数名を取得したい
C# 2005で作ってます。 FieldInfo[] fis = form.GetType().GetFields( BindingFlags.NonPublic | BindingFlags.GetField | BindingFlags.Instance); とすると、継承元のprivateな変数とイベント?が取得されてしまいます。 今まさに操作しているForm内に定義されているprivate変数のみを 取得するにはどういうフラグ設定を行えば良いのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
BindingFlags.DeclaredOnlyを追加してみてはどうでしょうか。
その他の回答 (1)
- Yune-Kichi
- ベストアンサー率74% (465/626)
回答No.2
Formデザイナ上で貼り付けたコンポーネントは,内部ではフィールドを生成します。 これらは,通常のフィールドと変化がありませんし,Reflectionですべて見つかります Form1.csであればForm1.Designer.csにこれらのフィールドは記述されています。 そのままでは区別する方法はないため, ・書かれているように名前付け規約で解決する ・適当な属性を作ってReflectionで見つけたいフィールドだけに属性を追加する といった手段を講じる必要があります。
質問者
お礼
ありがとうございます。 調べまくってたら、FieldInfo.FieldType.Module.ScopeNameが "CommonLanguageRuntimeLibrary"のものが変数として認識 しているような感じだったので、ひとまずはそれでやってみます。
お礼
ありがとうございます。 確かにこれで一部、不要なものを除外することが出来ました。 しかし、画面に貼り付けられているコンポーネントも出力 されてきてしまうのですが、どうにかなるかご存知でしょうか? やりたいことは、純粋にprivate定義が行われている変数 のみを一覧化したいのですが・・・。 命名ルールでも設けないとダメでしょうか??