0

尝试访问委托对象的 methodptr 属性时,出现错误:

"System.Delegate._methodPtr' is not accessible in this context because it is 'Friend'

,是否有某种方法可以访问该值并将其分配给变量?

4

1 回答 1

0

是否有某种方法可以访问该值并将其分配给变量?

您可以使用反射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 并且(如上所述)它无论如何都不会在这里工作。

于 2013-01-30T14:59:26.827 回答