2016-02-16 128 views
0

我正在使用C#反射這裏: 我有一個屬性的FieldInfo,我想獲取它所屬的類的實例(所以我可以達到另一個屬性的內容):從FieldInfo獲取容器類實例

對於爲例藉此類:

class MyClass 
{ 
    public int A { get; set; } 
    public int B { get; set; } 
} 

在代碼中的某些部分我有

void Function(FieldInfo fieldInfoOfA) 
{ 
    // here I need to find the value of B 
} 

這可能嗎?

+0

在範圍內有fieldInfoOfA的同時,您是否有範圍內的MyClass對象? – MatthewMartin

+0

我只有這個FieldInfo來自外部代碼。要添加一些上下文,我正在使用Unity的PropertyDrawer(http://docs.unity3d.com/ScriptReference/PropertyDrawer-fieldInfo.html),但它不相關。 – Titan

+0

如果您需要通過反射字段的值,請查看此問題:https://stackoverflow.com/questions/6961781/reflecting-a-private-field-from-a-base-class?rq=1 – MatthewMartin

回答

2

這可能嗎?

編號反射是關於發現類型的元數據。 A FieldInfo不包含有關該類型的特定實例的任何信息。這就是爲什麼你可以得到一個FieldInfo,甚至沒有在所有創建類型的實例:

typeof(MyClass).GetField(...) 

鑑於上面的片段中,你可以看到一個FieldInfo可以不上的特定實例的任何依賴獲得。

1

FieldInfo提供對類中的字段的元數據的訪問,它獨立於指定的實例。

如果你有MyClass一個實例,你可以這樣做:

object Function(MyClass obj, FieldInfo fieldInfoOfA) 
{ 
    var declaringType = fieldInfoOfA.DeclaringType; 

    var fieldInfoOfB = declaringType.GetField("B"); 

    return fieldInfoOfB.GetValue(obj); 
}