【发布时间】: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。显然您正在使用其他一些库。在您的定义中,
Textis 是一个字段。你应该能够使用调用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