【问题标题】:.NET FieldInfo -- get the object of which it *is* a field.NET FieldInfo——获取它*是*字段的对象
【发布时间】:2009-07-13 15:48:09
【问题描述】:

如何以编程方式获取对以 FieldInfo 对象为字段的对象的引用?

例如,我想要这样的东西:

myFieldInfo.GetOwner(); // returns the object of which myFieldObject is a field

【问题讨论】:

  • 小烦恼:C# 是一种编程语言。它没有 FieldInfo。 .NET 可以。你的主题说“C# FieldInfo”。
  • 这个问题的文本可以做澄清,它读起来好像你正在寻找一个实例对象,但你真正想要的是一个类型。
  • @John:我建议您在这里查看数千个其他 C# 问题,这些问题基本上是相同的。考虑一下你是否也想评论所有这些。与这种模糊和解可能会更容易,因为它永远不会消失。
  • @Anthony:或者,我可能会不时提出这个问题,而不是放弃。除其他外,我可能会发现这是一个语法问题而不是理解问题,在这种情况下,我会不理会它(因为我不理会最糟糕的语法)。我不会不问就知道的。
  • 我想在我用 FieldInfo 获得的对象上调用一个方法,这有效stackoverflow.com/a/9235316/74585

标签: c# .net reflection field


【解决方案1】:

很遗憾,您不能这样做,因为这种关系是相反的。 FieldInfo 对象表示独立于任何实例的元数据。对象字段的每个实例都有 1 个 FieldInfo。

这对于所有 Metadata 对象(例如 Type、FieldInfo、MethodInfo 等)都是如此……可以使用元数据对象来操作对象的实例。例如 FieldInfo 可用于通过 GetValue 方法获取实例值。

FieldInfo fi = GetFieldInfo();
object o = GetTheObject();
object value = fi.GetValue(o);

但是元数据对象永远不会与该类型的实例相关联。

【讨论】:

    【解决方案2】:

    试试这个:

    myFieldInfo.DeclaringType
    

    【讨论】:

    • 哎呀,我说得太早了。我想要 myFieldInfo 是字段的 object,而不是该对象的类。
    • @JaysonFix:抱歉,无法返回对对象本身的引用 - 您唯一能做的就是检索对字段所属的 type 的引用到。有关更多信息,请参阅 Jared 的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多