DynamicMethod.Invoke メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定されたカルチャ情報を使用し、指定したバインダーの制約の下で、指定したパラメーターを使用して動的メソッドを呼び出します。
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 オブジェクト。
binder
が null
の場合は、既定のバインダーが使用されます。 詳細については、「Binder」を参照してください。
- parameters
- Object[]
引数リスト。 これは、呼び出されるメソッドのパラメーターと同じ数、順序、型の引数の配列です。 パラメーターがない場合は、このパラメーターは null
である必要があります。
- culture
- CultureInfo
型の強制変換を制御するために使用する CultureInfo のインスタンス。
null
の場合は、現在のスレッドの CultureInfo が使用されます。 たとえば、この情報は 1000 を表す String を Double 値に正しく変換する場合に必要です。これは、カルチャによって 1000 の表記が異なるためです。
戻り値
呼び出されたメソッドの戻り値を格納する Object。
例外
VarArgs 呼び出し規則はサポートされません。
parameters
の要素の数が動的メソッドのパラメーターの数と一致しません。
parameters
の 1 つ以上の要素の型が動的メソッドの対応するパラメーターの型と一致しません。
動的メソッドは匿名でホストされずにモジュールに関連付けられます。それは、skipVisibility
を false
に設定して構築されましたが、動的メソッドは public
または internal
(Visual Basic では Friend
) ではないメンバーにアクセスします。
- または -
動的メソッドは匿名でホストされ、skipVisibility
を false
に設定して構築されましたが、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[])呼び出されるため、上記の注釈は両方のオーバーロードに適用されます。
このメソッドはアクセス許可を直接要求しませんが、動的メソッドを呼び出すと、 メソッドによってはセキュリティが要求される可能性があります。 たとえば、 パラメーターを に設定して作成された匿名でホストされる動的メソッドに対するrestrictedSkipVisibility
false
要求は行われません。 一方、ターゲット アセンブリの非表示メンバーにアクセスできるように、 を に設定してtrue
メソッドrestrictedSkipVisibility
を作成すると、ターゲット アセンブリのアクセス許可と ReflectionPermissionReflectionPermissionFlag.MemberAccess フラグが要求されます。
注意
.NET Framework 2.0 より前のバージョンでは、このメソッドは フラグと共にMemberAccess必要ReflectionPermissionでした。
適用対象
こちらもご覧ください
.NET