2012-05-07 4 views
0

標準的な型のパブリックフィールドのみを含むクラスがあります。 myObject.GetType().GetFields()コールは、空の配列を返します。Type.GetFieldsは、パブリックフィールド用の空のSystem.Reflection.FieldInfo配列を返します。

何が問題なのですか?

更新: 私はご迷惑をおかけしています。問題は、WCFサービスで公開されているクラスを使用していたことです。元のクラス(例えばA)と公開されたクラス(WcfReference.A)は異なるクラスです。 AのメンバはWcfReference.Aのプライベートフィールドになり、プロパティとして公開されます。

おそらく質問を削除する必要があります。

+3

「むしろ標準的な型」は確かに普遍的な定義ですが、サンプルコードは良いでしょう; –

+5

あなたの型にはフィールドがありプロパティはないと確信していますか? –

+0

フィールドをパブリックにすることはかなり悪い考えです。あなたは結局それを正しいと思ったでしょうか?再発コードを投稿してください。コメントは –

答えて

5

引数なしのGetFields()は、タイプのpublicフィールド(@Kenneth Ito noticedというプロパティではありません)を返します。

public class Test { 
    public string var_;//I'm a public field, I'll be returned 
    private int id_; //I'm a private field, you'll have to do more to get me 
    public int Id {get { return id_;} set {id_=value;}} //I'm a property, I don't feel concerned 
} 

あなたは

var test = new Test(); 
test.GetType().GetFields(); 

を行う一つのアイテムを持つ配列が返されます場合:.NETの古いバージョンではvar_

+1

+1です。 – zimdanen

+0

これは、1日の終わりの正解と思います。ある意味で、それは質問に答えます。 – Alex

+0

これは.NET 1.1以降でのみ有効で、 'GetFields()'のオーバーロードがあります。私は以下でそれを使ってプライベートフィールドを取得する方法を概説しました。 – krillgar

0

(私は1.1に機能を追加していますproject、pity me)の場合、デフォルトのメソッドGetFields()は空の配列を返します。 1.1以降は、このメソッドを更新してすべてのパブリックプロパティを含めるようにしました。私は同じことをするGetProperties()メソッドが既に存在するので、なぜ彼らがこの変更を行ったのか分かりません。

このメソッドはプライベートフィールドを取得する方法であるため、このメソッドは操作方法の知識が不可欠です。メソッドGetFields(BindingFlags flags)のオーバーロードがあります。これは、BindingFlagsの組み合わせを使用して、オブジェクトから必要なフィールドを決定します。

あなたは、インスタンスのプライベートフィールドをしたいのであれば、あなたが呼び出します。

GetFields(BindingFlags.Instance | BindingFlags.NonPublic); 

あなたが唯一のパブリック静的プロパティを使用する場合は、あなたが呼び出します。

GetFields(BindingFlags.Static | BindingFlags.Public); 

あなたはまたのためにそれらを結合し続けることができますすべての静的フィールド:

GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); 

他の多くの種類があります。を参照してください。上にリンクされているMSDNのページで、他に必要なものをチェックしてください。

関連する問題