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

定義

派生クラスでオーバーライドされた場合、型固有の方法でイベント ハンドラーを呼び出す方法を提供します。これにより、基本実装よりも効率が向上する場合があります。When overridden in a derived class, provides a way to invoke event handlers in a type-specific way, which can increase efficiency over the base implementation.

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

呼び出すジェネリック ハンドラー/デリゲート実装。The generic handler / delegate implementation to be invoked.

genericTarget
Object

指定したハンドラーが呼び出されるターゲット。The target on which the provided handler should be invoked.

次に示すのは、実装に使用できる基本的なパターンを示す擬似コードです。The following is pseudocode that illustrates a basic pattern that can be used for implementation. ここでは、MyRoutedEventHandlerRoutedEventHandlerのサブクラスです。Here, MyRoutedEventHandler is a subclass of 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でない場合に適したハンドラーが決定され、このリフレクションの手順によってパフォーマンスが低下します。The base implementation incorporates reflection to determine the right handler for any case where the handler is not literally RoutedEventHandler, and this reflection step does have some performance consequences. 呼び出しは、リフレクションに依存しないことで、より効率的に行うことができます。Invocations can be made more efficient by not relying on reflection. これは、オーバーライドを選択する任意のルーティングイベント引数クラスでこのメソッドを使用できるようにためするシナリオです。This is the scenario that motivates this method being available for any routed event arguments class that choose to override it. 実装では、型セーフハンドラーを呼び出す必要があるため、このメソッドの基本を呼び出すことはできません。Implementations should not call the base for this method, because your implementation should already be responsible for invoking the type safe handlers.

注意 (継承者)

このメソッドは、派生イベントデータクラスによってオーバーライドされ、デリゲートのより効率的な呼び出しを提供するためのものです。This method is intended to be overridden by derived event data classes to provide more efficient invocation of their delegates. 実装では、指定された genericHandler を型固有のデリゲートにキャストし、そのハンドラーを呼び出す必要があります。The implementation should cast the provided genericHandler to the type-specific delegate, and then invoke that handler.

既定の実装は、指定されたハンドラーを呼び出そうとして、RoutedEventHandlerとしてキャストしようとします。The default implementation will attempt to invoke the provided handler, attempting to cast it as RoutedEventHandler. genericHandler または genericTarget のいずれかが nullとして指定されている場合、例外が発生します。If either genericHandler or genericTarget is provided as null, exceptions will be raised.

適用対象