在此上下文中无法访问“System.Delegate._methodPtr”,因为它是“朋友”

时间:2013-01-30 14:49:47

标签: vb.net

在尝试访问委托对象的methodptr属性时,我收到错误:

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

,是否有一些方法可以访问此值并将其分配给变量?

1 个答案:

答案 0 :(得分:0)

  

是否有一些方法可以访问此值并将其分配给变量?

您可以使用reflection 1 来检索值。但是,您可能不希望这样做:由于某种原因,此值为Friend。这是一个实现细节,您作为框架的使用者无权直接访问它:它可能工作,或者它可能突然中断(例如,当Microsoft分发库的更新时)。您的代码也不适用于其他.NET实现,例如Mono。

特别是,this member is not documented in the MSDN因此不能依赖它的存在或行为。


1 以下应该可以解决问题:

Dim delegateType = yourDelegateObject.GetType()
Dim field = delegateType.GetField("_methodPtr", _
        BindingFlags.Instance Or BindingFlags.NonPublic)
Dim methodPtr = DirectCast(field.GetValue(yourDelegateObject), IntPtr)

未经测试,因为我只有Mono和(如上所述)它无论如何都不会在这里工作。