[英]How to get value of inherited property using reflection?
如何使用反射获取继承的属性值? 我尝试使用BindingFlags
但仍然触发NullReferenceException
object val = targetObject.GetType().GetProperty("position", BindingFlags.FlattenHierarchy).GetValue(targetObject, null);
position
是公共财产,具有声明价值。
编辑:
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
总是为null :(,
如果您使用BindingFlags
重载,则必须明确指定您感兴趣的所有标志。
另请注意:(来自MSDN )
您必须指定BindingFlags.Instance或BindingFlags.Static才能获得返回。
object val = targetObject.GetType()
.GetProperty("position",
BindingFlags.FlattenHierarchy |
BindingFlags.Instance |
BindingFlags.Public)
.GetValue(targetObject, null);
编辑:
你有一个position
领域而不是财产 !
(一个开始学习差异的好地方: C#3.0+中属性和字段之间的差异,尤其是这个答案 )
将您的position
更改为财产:
public float[] position { get; set; }
或者使用targetObject.GetType().GetField(...
方法来检索字段。
BindingFlags.FlattenHierarchy
仅适用于静态成员。 一定要指定
BindingFlags.Instance | BindingFlags.Public
你应该得到继承的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.