【问题标题】:How to get the fieldInfo for a Friend WithEvents member?如何获取 Friend WithEvents 成员的 fieldInfo?
【发布时间】:2015-01-15 14:10:28
【问题描述】:

我在 vb.net 表单 MyForm 中定义了以下成员:

Friend WithEvents myTab As Tab

我正在尝试使用以下代码获取此成员:

Dim FieldInfo As System.Reflection.FieldInfo = MyForm.GetType.GetField("myTab", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)

,但我总是一无所获。如果我尝试:

Dim MemberInfo As System.Reflection.MemberInfo = MyForm.GetType.GetMember("myTab", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)(0)

,我确实获得了成员,但我无法获得它的价值。

是否需要使用其他 BindingFlags 来获取具有 Friend WithEvents 修饰符的成员的 FieldInfo?

【问题讨论】:

  • Tab 到底是什么?
  • 这是表单上的第 3 方选项卡控件。重要吗?

标签: vb.net reflection friend fieldinfo


【解决方案1】:

是的,这不能像写的那样工作。 VB 编译器对 WithEvents 成员进行特殊处理以实现其功能。完成后,您的 myTab 变量不再是一个字段。当您使用ildasm.exe 实用程序查看生成的程序集时,您会看到一些东西。你会看到:

  • myTab 现在是一个带有 getter 和 setter 的 属性。您需要使用 GetProperty() 而不是 GetField() 来检索它。
  • 该属性有一个存储对象引用的支持变量,它的名称是_myTab。注意前面的下划线。

不确定您真正想走哪条路,如果您想修改事件,则需要该属性。所以它是您需要的其中之一:

Dim info = MyForm.GetType().GetField("_myTab", _
               BindingFlags.Instance Or BindingFlags.NonPublic)

或者

Dim info = myForm.GetType().GetProperty("myTab", _
               BindingFlags.Instance Or BindingFlags.NonPublic)

可能是第一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多