繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM