尝试访问委托对象的 methodptr 属性时,出现错误:
"System.Delegate._methodPtr' is not accessible in this context because it is 'Friend'
,是否有某种方法可以访问该值并将其分配给变量?
尝试访问委托对象的 methodptr 属性时,出现错误:
"System.Delegate._methodPtr' is not accessible in this context because it is 'Friend'
,是否有某种方法可以访问该值并将其分配给变量?
是否有某种方法可以访问该值并将其分配给变量?
您可以使用反射1来检索该值。但是,您可能不想这样做:这个值是Friend
有原因的。这是一个实现细节,作为框架的使用者,您无权直接访问它:它可能会工作,也可能会突然中断(例如,当 Microsoft 分发库的更新时)。您的代码也不适用于其他 .NET 实现,例如 Mono。
特别是,此成员未在 MSDN 中记录,因此不能依赖其存在或行为。
1以下应该可以解决问题:
Dim delegateType = yourDelegateObject.GetType()
Dim field = delegateType.GetField("_methodPtr", _
BindingFlags.Instance Or BindingFlags.NonPublic)
Dim methodPtr = DirectCast(field.GetValue(yourDelegateObject), IntPtr)
未经测试,因为我只有 Mono 并且(如上所述)它无论如何都不会在这里工作。