RoutedEventArgs.InvokeEventHandler(Delegate, Object) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
派生クラスでオーバーライドされた場合、型固有の方法でイベント ハンドラーを呼び出す方法を提供します。これにより、基本実装よりも効率が向上する場合があります。
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キャストされます。 または genericTarget
が genericHandler
としてnull
指定されている場合は、例外が発生します。
適用対象
.NET