如何获取 Friend WithEvents 成员的 fieldInfo?
How to get the fieldInfo for a Friend WithEvents member?
我在 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)
,但我总是在 return 中什么也得不到。如果我尝试:
Dim MemberInfo As System.Reflection.MemberInfo = MyForm.GetType.GetMember("myTab", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)(0)
,我确实得到了成员,但我无法得到它的值。
是否需要使用其他 BindingFlags 来获取具有 Friend WithEvents 修饰符的成员的 FieldInfo?
是的,这不能像写的那样工作。 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)
可能是第一个。
我在 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)
,但我总是在 return 中什么也得不到。如果我尝试:
Dim MemberInfo As System.Reflection.MemberInfo = MyForm.GetType.GetMember("myTab", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)(0)
,我确实得到了成员,但我无法得到它的值。
是否需要使用其他 BindingFlags 来获取具有 Friend WithEvents 修饰符的成员的 FieldInfo?
是的,这不能像写的那样工作。 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)
可能是第一个。