在尝试访问委托对象的methodptr属性时,我收到错误:
"System.Delegate._methodPtr' is not accessible in this context because it is 'Friend'
,是否有一些方法可以访问此值并将其分配给变量?
答案 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和(如上所述)它无论如何都不会在这里工作。