从FieldInfo获取容器类实例

时间:2016-02-16 20:06:13

标签: c# reflection fieldinfo

我在这里使用C#反射: 我有一个属性的FieldInfo,我想得到它所属的类的实例(所以我可以到达另一个属性的内容):

例如,参加这个课程:

class MyClass
{
   public int A { get; set; }
   public int B { get; set; }
}

在我的代码的某些部分

void Function(FieldInfo fieldInfoOfA)
{
  // here I need to find the value of B
}

这可能吗?

2 个答案:

答案 0 :(得分:2)

FieldInfo提供对类中字段的元数据的访问,它独立于指定的实例。

如果您有MyClass的实例,则可以执行此操作:

object Function(MyClass obj, FieldInfo fieldInfoOfA)
{
    var declaringType = fieldInfoOfA.DeclaringType;

    var fieldInfoOfB = declaringType.GetField("B");

    return fieldInfoOfB.GetValue(obj);
}

答案 1 :(得分:2)

  

这可能吗?

没有。反思是关于发现类型的元数据。 FieldInfo不包含有关该类型的特定实例的任何信息。这就是为什么你甚至可以得到FieldInfo而根本不创建该类型的实例:

typeof(MyClass).GetField(...)

鉴于上面的代码段,您可以看到可以在不依赖特定实例的情况下获得FieldInfo