2019年11月29日 - C#の - プライベートイベントを呼び出すための反射

オリジナル: 2019年11月29日- C#の-プライベートイベントを呼び出すための反射

題名 著者 日付 CREATETIME カテゴリ
プライベートイベントを呼び出すためのC#のリフレクション
lindexi
2019年11月29日午前8時51分13秒0800
2018年9月19日夜08時44分19秒0800
C#のリフレクション

プライベートイベント呼び出すためにC#の反射では、多くの場合、通話にどのように伝えるために、この記事を書く方法を知りません。

クラスコードがプライベートイベントを定義すると仮定

    クラス A 
    { プライベートイベントのEventHandler Fxの 
        { アドオン {}
             削除 {} 
        } 
    }
           
            

反射がイベントを介して取得することができますが、イベントを直接追加することはできませんFxの

            VAR  eventInfo  =  typeof演算A)。GetEvent"為替"のBindingFlagsインスタンス |  のBindingFlags非公開)。

あなたが呼び出す場合AddEventHandlerは、直接の異常の下に表示されます

            VAR  eventInfo  =  typeof演算A)。GetEvent"為替"のBindingFlagsインスタンス |  のBindingFlags非公開)。VaRのAは= 新しいA(); eventInfoAddEventHandler新しいイベントハンドラ為替)); ボイドのFxオブジェクト送信者のEventArgsのE
            { 
            }

                

             

               
システムがInvalidOperationExceptionが:「このイベントを追加するパブリックメソッドが存在しないとして、それはイベントハンドラを追加することはできません。」

解決策はGetAddMethod以下のメソッドを参照してくださいを呼び出すことです

            VAR  eventInfo  =  typeof演算A)。GetEvent"為替"のBindingFlagsインスタンス |  のBindingFlags非公開)。
            VAR  addFx  =  eventInfoGetAddMethod真の);
            VAR  removeFx  =  eventInfoGetRemoveMethod真の); VaRのAは= 新しいA(); addFx呼び出し

                

             [] { 新しい イベントハンドラ為替)})。
            removeFx呼び出し新しい [] { 新しいイベントハンドラ為替)})。ボイドのFxオブジェクト送信者のEventArgsのE
            { 
            } 

               

参照してくださいhttps://stackoverflow.com/a/6423886/6116637を

あなたが異常な型変換が発生する可能性があります場合はSystem.ArgumanetException:'Object of type 'System.EventHandler1[System.EventArgs]' cannot be converted to type 'System.EventHandler'. 、参照反射登録イベントを使用して.NET / C# - walterlvを

より多くの反射を参照してください。

win10 UWP反射

大幅に反射コールのパフォーマンスを改善するための委員会を作成するには、.NETのコア/フレームワーク - walterlv

(特にUWP用)リフレクターをサポートするために、.NETネイティブランタイム命令セット - walterlv

.NET / C#を含むrefまたはメソッドのパラメータ外を呼び出すためにリフレクションを使用して - walterlv

.NET / C#Iキャッシュ設計(反射の動作抵抗性能キャッシュ、添付の使用)のタイプをお勧めします - walterlvを

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12075827.html