2013-10-16 8 views
2

간단한 POCO 클래스가 있습니다.뒷받침 필드가있을 때 반성을 통해 클래스 필드를 가져 오는 방법은 무엇입니까?

class C { 
    [MyAtrib] 
    public int i {get; set;} 
    [MyAtrib] 
    public int i2; 
} 

내가 전화 할 때 :

클래스 (예)에
GetType().GetFields(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 

나는 자동으로 게터/세터를 생성 한 그 회원 FieldInfo (위 즉 int i)을 얻을 수 없습니다.

실제로 이러한 사용자 지정 특성 (MyAtrib)을 읽으려고하고 있으며 {get; set;}의 속성에 대해서는이 작업을 수행 할 수 없습니다.

왜 그렇습니까? i이 공개 될 예정이므로 i과 (개인) 보조 필드를 모두 가질 것으로 예상됩니다.

어쨌든 반사를 통해 i 님의 MyAtrib에 갈 수 있습니까?

+3

getters 및 setter가있는 필드는 필드가 아닙니다. 그들은 속성입니다. –

+3

'GetProperties' 사용 –

+0

BindingFlags.NonPublic을 사용하면 뒷받침 필드를 확실히 얻을 수 있습니다. 그것은 말할 수없는 이름, ' k__BackingField'을 가지고 있습니다. 이 속성은 뒷받침 필드에 적용되지 * 않습니다 * 속성에 있습니다. GetProperty()를 호출하려면 GetProperty()를 호출해야합니다. –

답변

6

지금 필드를 얻지 만 public int i {get; set;}은 속성입니다. 속성을 가져와야합니다 :