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);
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。
例
次のコード例では、米国英語カルチャを使用し、正確にバインドして動的メソッドを呼び出します。 このコード例は、 DynamicMethod クラスに提供されるより大きな例の一部です。
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 Intermediate Language (MSIL) の追加生成など、ダイナミックメソッドの変更を試みても無視されます。例外はスローされません。
すべての動的メソッドは静的であるため、 obj パラメーターは常に無視されます。 動的メソッドをインスタンス メソッドのように扱うには、オブジェクト インスタンスを受け取る CreateDelegate(Type, Object) オーバーロードを使用します。
動的メソッドにパラメーターがない場合は、 parameters の値を nullする必要があります。 それ以外の場合、パラメーター配列内の要素の数、型、順序は、動的メソッドのパラメーターの数、型、順序と同じである必要があります。
Note
このメソッド オーバーロードは、Invoke(Object, Object[]) クラスから継承されたMethodBase メソッド オーバーロードによって呼び出されるため、上記の注釈は両方のオーバーロードに適用されます。
このメソッドはアクセス許可を直接要求しませんが、動的メソッドを呼び出すと、メソッドによってはセキュリティが要求される可能性があります。 たとえば、 restrictedSkipVisibility パラメーターを false に設定して作成された匿名でホストされる動的メソッドに対する要求は行われません。 一方、ターゲット アセンブリの非表示のメンバーにアクセスできるように、restrictedSkipVisibilityが true に設定されたメソッドを作成すると、ターゲット アセンブリのアクセス許可と、ReflectionPermissionFlag.MemberAccess フラグを持つReflectionPermissionが要求されます。