RoutedEventArgs.InvokeEventHandler(Delegate, Object) メソッド

定義

派生クラスでオーバーライドされた場合、型固有の方法でイベント ハンドラーを呼び出す方法を提供します。これにより、基本実装よりも効率が向上する場合があります。

protected:
 virtual void InvokeEventHandler(Delegate ^ genericHandler, System::Object ^ genericTarget);
protected virtual void InvokeEventHandler (Delegate genericHandler, object genericTarget);
abstract member InvokeEventHandler : Delegate * obj -> unit
override this.InvokeEventHandler : Delegate * obj -> unit
Protected Overridable Sub InvokeEventHandler (genericHandler As Delegate, genericTarget As Object)

パラメーター

genericHandler
Delegate

呼び出すジェネリック ハンドラー/デリゲート実装。

genericTarget
Object

指定したハンドラーが呼び出されるターゲット。

実装に使用できる基本的なパターンを示す擬似コードを次に示します。 ここで、 MyRoutedEventHandler は の RoutedEventHandlerサブクラスです。

public class MyRoutedEventArgs : RoutedEventArgs 
{
// other members omitted
    protected override void InvokeEventHandler(Delegate genericHandler, object genericTarget) {
        MyRoutedEventHandler handler = (MyRoutedEventHandler) genericHandler;
        handler(genericTarget, this);
    }
}
Public Class MyRoutedEventArgs
    Inherits RoutedEventArgs
' other members omitted
    Protected Overrides Sub InvokeEventHandler(ByVal genericHandler As System.Delegate, ByVal genericTarget As Object)
        Dim handler As MyRoutedEventHandler = CType(genericHandler, MyRoutedEventHandler)
        handler(genericTarget, Me)
    End Sub
End Class

注釈

基本実装にはリフレクションが組み込まれており、ハンドラーがリテラル RoutedEventHandlerではない場合に適したハンドラーを決定します。このリフレクション 手順にはパフォーマンスの影響があります。 リフレクションに依存しないことで、呼び出しをより効率的にすることができます。 これは、このメソッドをオーバーライドすることを選択したルーティング イベント引数クラスで使用できるようにするシナリオです。 実装では、型セーフ ハンドラーの呼び出しを既に担当している必要があるため、このメソッドのベースを呼び出さないでください。

注意 (継承者)

このメソッドは、デリゲートをより効率的に呼び出すために、派生イベント データ クラスによってオーバーライドされることを目的としています。 実装では、指定された genericHandler を型固有のデリゲートにキャストしてから、そのハンドラーを呼び出す必要があります。

既定の実装では、指定されたハンドラーの呼び出しが試行され、 として RoutedEventHandlerキャストされます。 または genericTargetgenericHandler としてnull指定されている場合は、例外が発生します。

適用対象