デリゲート オブジェクトの 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 がライブラリの更新を配布した場合)。コードは、Mono などの代替 .NET 実装でも機能しません。
特に、このメンバーは MSDNに記載されていないため、その存在や動作は信頼できません。
1次のようにすればうまくいきます。
Dim delegateType = yourDelegateObject.GetType()
Dim field = delegateType.GetField("_methodPtr", _
BindingFlags.Instance Or BindingFlags.NonPublic)
Dim methodPtr = DirectCast(field.GetValue(yourDelegateObject), IntPtr)
私はモノしか持っておらず、(前述のように)ここでは動作しないため、テストされていません。