次の方法で共有


DynamicMethod.Invoke メソッド

定義

指定されたカルチャ情報を使用し、指定したバインダーの制約の下で、指定したパラメーターを使用して動的メソッドを呼び出します。

public:
 override System::Object ^ Invoke(System::Object ^ obj, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ parameters, System::Globalization::CultureInfo ^ culture);
public override object? Invoke (object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? parameters, System.Globalization.CultureInfo? culture);
public override object Invoke (object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object[] parameters, System.Globalization.CultureInfo culture);
override this.Invoke : obj * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo -> obj
Public Overrides Function Invoke (obj As Object, invokeAttr As BindingFlags, binder As Binder, parameters As Object(), culture As CultureInfo) As Object

パラメーター

obj
Object

それらは静的であるため、動的メソッドではこのパラメーターは無視されます。 nullを指定します。

invokeAttr
BindingFlags

BindingFlags 値のビットごとの組み合わせ。

binder
Binder

バインディング、引数型の強制変換、メンバーの呼び出し、およびリフレクションを使用した MemberInfo オブジェクトの取得を有効にする Binder オブジェクト。 bindernull の場合は、既定のバインダーが使用されます。 詳細については、「Binder」を参照してください。

parameters
Object[]

引数リスト。 これは、呼び出されるメソッドのパラメーターと同じ数、順序、型の引数の配列です。 パラメーターがない場合は、このパラメーターは null である必要があります。

culture
CultureInfo

型の強制変換を制御するために使用する CultureInfo のインスタンス。 null の場合は、現在のスレッドの CultureInfo が使用されます。 たとえば、この情報は 1000 を表す StringDouble 値に正しく変換する場合に必要です。これは、カルチャによって 1000 の表記が異なるためです。

戻り値

呼び出されたメソッドの戻り値を格納する Object

例外

VarArgs 呼び出し規則はサポートされません。

parameters の要素の数が動的メソッドのパラメーターの数と一致しません。

parameters の 1 つ以上の要素の型が動的メソッドの対応するパラメーターの型と一致しません。

動的メソッドは匿名でホストされずにモジュールに関連付けられます。それは、skipVisibilityfalse に設定して構築されましたが、動的メソッドは public または internal (Visual Basic では Friend) ではないメンバーにアクセスします。

- または -

動的メソッドは匿名でホストされ、skipVisibilityfalse に設定して構築されましたが、public ではないメンバーにアクセスします。

- または -

動的メソッドには、検証できないコードが含まれています。 DynamicMethod については、「解説」の「検証」セクションを参照してください。

次のコード例では、US-English カルチャを使用して、正確なバインドを使用して動的メソッドを呼び出します。 このコード例は、DynamicMethod クラスのために提供されている大規模な例の一部です。

Console::WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
array<Object^>^ invokeArgs = { "\r\nHello, World!", 42 };
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and value-type arguments
// must be boxed.
Object^ objRet = hello->Invoke(nullptr, BindingFlags::ExactBinding, nullptr, invokeArgs, gcnew CultureInfo("en-us"));
Console::WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine("\r\nUse the Invoke method to execute the dynamic method:");
// Create an array of arguments to use with the Invoke method.
object[] invokeArgs = {"\r\nHello, World!", 42};
// Invoke the dynamic method using the arguments. This is much
// slower than using the delegate, because you must create an
// array to contain the arguments, and value-type arguments
// must be boxed.
object objRet = hello.Invoke(null, BindingFlags.ExactBinding, null, invokeArgs, new CultureInfo("en-us"));
Console.WriteLine("hello.Invoke returned: " + objRet);
Console.WriteLine(vbCrLf & "Use the Invoke method to execute the dynamic method:")
' Create an array of arguments to use with the Invoke method.
Dim invokeArgs() As Object = {vbCrLf & "Hello, World!", 42}
' Invoke the dynamic method using the arguments. This is much
' slower than using the delegate, because you must create an
' array to contain the arguments, and value-type arguments
' must be boxed.
Dim objRet As Object = hello.Invoke(Nothing, _
    BindingFlags.ExactBinding, Nothing, invokeArgs, _
    New CultureInfo("en-us"))
Console.WriteLine("hello.Invoke returned: {0}", objRet)

注釈

一覧表示されている例外に加えて、呼び出し元のコードは、動的メソッドによってスローされた例外をキャッチするように準備する必要があります。

メソッドによって作成されたデリゲートを使用して動的メソッドを CreateDelegate 実行する方が、 メソッドを使用 Invoke して実行するよりも効率的です。

メソッドまたは メソッドを Invoke 呼び出すと、 CreateDelegate 動的メソッドが完了します。 パラメーター定義の変更や Microsoft 中間言語 (MSIL) の出力など、動的メソッドをさらに変更しようとする試みは無視されます。例外はスローされません。

すべての動的メソッドは静的であるため obj 、 パラメーターは常に無視されます。 動的メソッドをインスタンス メソッドのように扱うには、オブジェクト インスタンスを CreateDelegate(Type, Object) 受け取るオーバーロードを使用します。

動的メソッドにパラメーターがない場合、 の parameters 値は である null必要があります。 それ以外の場合、parameters 配列内の要素の数、型、順序は、動的メソッドのパラメーターの数、型、および順序と同じである必要があります。

注意

このメソッド オーバーロードは、 クラスからMethodBase継承されたメソッド オーバーロードによってInvoke(Object, Object[])呼び出されるため、上記の注釈は両方のオーバーロードに適用されます。

このメソッドはアクセス許可を直接要求しませんが、動的メソッドを呼び出すと、 メソッドによってはセキュリティが要求される可能性があります。 たとえば、 パラメーターを に設定して作成された匿名でホストされる動的メソッドに対するrestrictedSkipVisibilityfalse要求は行われません。 一方、ターゲット アセンブリの非表示メンバーにアクセスできるように、 を に設定してtrueメソッドrestrictedSkipVisibilityを作成すると、ターゲット アセンブリのアクセス許可と ReflectionPermissionReflectionPermissionFlag.MemberAccess フラグが要求されます。

注意

.NET Framework 2.0 より前のバージョンでは、このメソッドは フラグと共にMemberAccess必要ReflectionPermissionでした。

適用対象

こちらもご覧ください