如何使用反射获取继承属性的值?

abu*_*uba 9 c# reflection

如何使用反射获取继承的属性值?我尝试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(...方法来检索字段.