如何使用反射获取继承的属性值?
我尝试使用BindingFlags
,但仍触发NullReferenceException
object val = targetObject.GetType().GetProperty("position", BindingFlags.FlattenHierarchy).GetValue(targetObject, null);
position
是iherited公共财产,具有声明的价值。
修改
class myParent
{
public float[] position;
public myParent()
{
this.position = new float[] { 1, 2, 3 };
}
}
class myChild : myParent
{
public myChild() : base() { }
}
myChild obj = new myChild();
PropertyInfo p = obj.GetType().GetProperty("position", BindingFlags.Instance | BindingFlags.Public);
我尝试了几种与BindingFlags的组合,但p
总是为空:(,
答案 0 :(得分:13)
如果您使用BindingFlags
重载,则必须明确指定您感兴趣的所有标志。
另请注意:(来自MSDN)
您必须指定BindingFlags.Instance或BindingFlags.Static 为了获得回报。
object val = targetObject.GetType()
.GetProperty("position",
BindingFlags.FlattenHierarchy |
BindingFlags.Instance |
BindingFlags.Public)
.GetValue(targetObject, null);
编辑:
您有position
字段而非属性!
(开始学习差异的好地方:Difference between Property and Field in C# 3.0+尤其是这个answer)
将您的position
更改为媒体资源:
public float[] position { get; set; }
或者您使用targetObject.GetType().GetField(...
方法检索字段。
答案 1 :(得分:1)
BindingFlags.FlattenHierarchy
仅适用于静态成员。请务必指定
BindingFlags.Instance | BindingFlags.Public
你应该得到继承的属性。