指定されたメンバを呼び出します。呼び出されるメソッドは、アクセスできる必要があり、指定したバインダと呼び出し属性の制約の下で、指定した引数リストと最も的確に一致します。
Overrides Overloads Public Function InvokeMember( _
ByVal name As String, _ ByVal invokeAttr As BindingFlags, _ ByVal binder As Binder, _ ByVal target As Object, _ ByVal args() As Object, _ ByVal modifiers() As ParameterModifier, _ ByVal culture As CultureInfo, _ ByVal namedParameters() As String _) As Object Implements IReflect.InvokeMember
[C#]
public override object InvokeMember(stringname,BindingFlagsinvokeAttr,Binderbinder,objecttarget,object[] args,ParameterModifier[] modifiers,CultureInfoculture,string[] namedParameters);
[C++]
public: Object* InvokeMember(String* name,BindingFlagsinvokeAttr,Binder* binder,Object* target,Object* args __gc[],ParameterModifiermodifiers[],CultureInfo* culture,String* namedParameters __gc[]);
[JScript]
public override function InvokeMember(
name : String,invokeAttr : BindingFlags,binder : Binder,target : Object,args : Object[],modifiers : ParameterModifier[],culture : CultureInfo,namedParameters : String[]) : Object;
パラメータ
- name
呼び出されるメンバの名前。コンストラクタ、メソッド、プロパティ、フィールドなどを指定できます。空の文字列 ("") を渡すと、既定メンバが呼び出されます。 - invokeAttr
呼び出し属性。 BindingFlags の InvokeMethod 、 CreateInstance 、 Static 、 GetField 、 SetField 、 GetProperty 、または SetProperty のいずれかにする必要があります。適切な呼び出し属性を指定する必要があります。静的メンバを呼び出す場合は、 Static フラグを設定する必要があります。 - binder
バインディング、引数型の強制変換、メンバの呼び出し、およびリフレクションを通じた MemberInfo オブジェクトの取得を有効にするオブジェクト。binder が null 参照 (Visual Basic では Nothing) の場合は、既定のバインダが使用されます。 Binder のトピックを参照してください。 - target
指定したメンバを呼び出す対象となるオブジェクト。 - args
呼び出すメンバのパラメータの数、順序、および型を格納しているオブジェクト型の配列。初期化されていないオブジェクトが args に格納されている場合は、既定のバインダを使用して 0、0.0、または文字列に拡張できる空オブジェクトとして処理されます。 - modifiers
args と同じ長さで、要素が呼び出されるメンバの引数に関連付けられた属性を表す ParameterModifer 型の配列。パラメータにはメンバのシグネチャに関連付けられた属性があります。ByRef の場合は ParameterModifer.ByRef を使用します。ない場合は ParameterModifer.None を使用します。既定のバインダはこれらを厳密に一致させます。 In や InOut などの属性は、バインディングでは使用しませんが、 ParameterInfo を使用して表示できます。 - culture
型の強制変換を制御するために使用する CultureInfo のインスタンス。このインスタンスは、たとえば、1000 を表す文字列を Double 値に変換する場合に必要です。これは、カルチャによって 1000 の表記が異なるためです。culture が null 参照 (Visual Basic では Nothing) の場合は、現在のスレッドの Cultureinfo の Cultureinfo が使用されます。 - namedParameters
要素ゼロから args 配列と一致させるパラメータ名を格納している文字列型の配列。配列の要素はすべて揃っている必要があります。 args. Length が namedParameters. Length より大きい場合、残りのパラメータが順に設定されます。
戻り値
呼び出されたメンバの戻り値を表すオブジェクト。
実装
解説
次の条件の両方が true の場合、メソッドが呼び出されます。
- メソッド宣言のパラメータの数が、指定した引数リストの引数の数と等しい (メンバに既定の引数が定義されている場合を除く)。
- 各引数の型をバインダによってパラメータの型に変換できる。
バインダは一致するすべてのメソッドを検索します。これらのメソッドは、要求されるバインディングの種類 (BindingFlags.MethodInvoke 、 BindingFlags.GetProperties など) に基づいて検索されます。メソッド セットは、名前、引数の数、バインダで定義されている一連の検索修飾子によってフィルタ処理されます。
メソッドは、選択された後に呼び出されます。その時点で、アクセスできるかどうかが確認されます。検索では、メソッドに関連付けられているアクセシビリティ属性に基づいて、どのメソッド セットを検索するかを制御できます。 Binder.BindToMethod メソッドは、呼び出すメソッドを選択します。既定のバインダは最も的確に一致したものを選択します。
メモ 完全に信頼されたコードでは、アクセス制限は無視されます。コードが完全に信頼されていれば、リフレクションを使用して、プライベートなコンストラクタ、メソッド、フィールド、およびプロパティにアクセスし、それらを呼び出すことができます。
現在、 InvokeMember はオブジェクトの型ごとに Microsoft .NET Framework リフレクション セマンティクスを実行します。
名前で指定したメンバが配列で、 invokeAttr で BindingFlags.GetField フラグが設定されている場合、 args 配列は返される値が格納されている要素を指定します。たとえば、次に示す Type オブジェクト t を通じた呼び出しでは、呼び出し元オブジェクトのメンバである文字列配列 MyArray の最初の要素の値が返されます。 String ret = (String) t.InvokeMember ("MyArray", BindingFlags.GetField, null, this, new Variant[]{0});
InvokeMember を使用して、メンバ配列の 1 つ以上の要素を設定できます。すべての要素に同じ値が設定されます。 args 配列の書式は次のとおりです。
{index1, index2, , value}
たとえば、前の例の MyArray の最初のメンバを設定するには、次のようにします。
t.InvokeMember ("MyArray", BindingFlags.SetField, null, this, new Variant[]{0,"Updated"});
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
TypeDelegator クラス | TypeDelegator メンバ | System.Reflection 名前空間 | TypeDelegator.InvokeMember オーバーロードの一覧 | CultureInfo