【问题标题】:How to get the value of a private member using reflection C# 4如何使用反射 C# 4 获取私有成员的值
【发布时间】:2011-11-28 13:14:12
【问题描述】:

我正在尝试从 NumericUpDown 获取私有成员的值(文本)。

 public class NumericUpDown
 {
      private TextBox Text;
      ...
      ...
 }

我不明白为什么它没有显示为一个字段。也许有人可以澄清字段和成员之间的区别。如果它是一个领域,我发现使用反射我可以通过以下方式获得它:

 typeof(NumericUpDown).GetField("Text", BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this) As TextBox

但它是会员,所以我必须通过以下方式获取 MemberInfo:

 typeof(NumericUpDown).GetMember("Text", BindingFlags.FlattenHierarchy | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(0)

this 不返回值,而是返回带有类型的字符串。这是有道理的,因为它是 memberinfo 的值,但我想要实际对象的实际值。

有没有办法像 FieldInfo.GetValue(object) 一样检索它?任何帮助或建议。提前致谢。

【问题讨论】:

  • NumericUpDown.Text 不是成员,它是一个属性。而且是公开的。请说明您要使用的类型和成员。
  • @SevaTitov 也许我的搜索是错误的。我最初找到了一个 _textBox,但我无法提取它。这就是我要找的吗?我正在寻找文本框。当我用反射搜索时,我发现了 _textBox 和 Text,它们都说它们是 TextBox。对此有任何启示吗?现在,我能够引用它的唯一方法是当它获得焦点时。然后如果我抓住原始来源并将文本框设置在那里,但这似乎不是最好的方法。
  • 好的。我以为您使用的是 System.Windows.Forms 中的标准 NumericUpDown。显然您正在使用其他一些库。在您的定义中,Text is 是一个字段。你应该能够使用调用myType.InvokeMember("Text", BindingFlags.GetField | BindingFlags.Instance | indingFlags.NonPublic, null, myInstance, null); 来检索它
  • @SevaTitov Silverlight。我试过 typeof(NumericUpDown).InvokeMember("Text", BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, ctrl, null);它给了我一个我不理解的 MethodAccessException。我也找到了一个图表,我并不疯狂,TextBox 是 Text 和 _text,都是私有的。 lh4.ggpht.com/_iM_rdx7nVGA/SR9_rUmDr0I/AAAAAAAAATo/avem0hemJGo/…

标签: reflection c#-4.0 private member


【解决方案1】:

【讨论】:

  • 有趣,不知道。
  • 嗯,这有好有坏。我知道为什么我不能抓住它,但我现在被我的黑客所困,或者直到他们暴露那个对象。感谢您对这个问题有所了解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
相关资源
最近更新 更多