如何使用反射获取继承的属性值?我尝试BindingFlags但仍然触发NullReferenceException
object val = targetObject.GetType().GetProperty("position", BindingFlags.FlattenHierarchy).GetValue(targetObject, null);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
我尝试了几种与BindingFlags的组合,但p总是为null :(,
nem*_*esv 15
如果您使用重载,BindingFlags则必须明确指定您感兴趣的所有标志.
另请注意:(来自MSDN)
您必须指定BindingFlags.Instance或BindingFlags.Static才能获得返回.
object val = targetObject.GetType()
.GetProperty("position",
BindingFlags.FlattenHierarchy |
BindingFlags.Instance |
BindingFlags.Public)
.GetValue(targetObject, null);
Run Code Online (Sandbox Code Playgroud)
编辑:
你有一个position 领域而不是一个属性!
(一个开始学习差异的好地方:C#3.0+中属性和字段之间的差异,尤其是这个答案)
将您position改为财产:
public float[] position { get; set; }
Run Code Online (Sandbox Code Playgroud)
或者您使用该targetObject.GetType().GetField(...方法来检索字段.