Type.InvokeMember メソッド (String, BindingFlags, Binder, Object, Object , CultureInfo)
指定したバインディング制約を使用し、指定したメンバのうち、指定した引数リストおよびカルチャと一致するメンバを呼び出します。
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 culture As CultureInfo _) As Object
[C#]
public object InvokeMember(stringname,BindingFlagsinvokeAttr,Binderbinder,objecttarget,object[] args,CultureInfoculture);
[C++]
public: Object* InvokeMember(String* name,BindingFlagsinvokeAttr,Binder* binder,Object* target,Object* args __gc[],CultureInfo* culture);
[JScript]
public function InvokeMember(
name : String,invokeAttr : BindingFlags,binder : Binder,target : Object,args : Object[],culture : CultureInfo) : Object;
パラメータ
name
呼び出すコンストラクタ、メソッド、プロパティ、またはフィールド メンバの名前を格納している String 。または
既定メンバを呼び出すための空の文字列 ("")。
invokeAttr
検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。アクセスは、Public、 NonPublic 、Private、 InvokeMethod 、 GetField など、 BindingFlags のうちの 1 つになります。検索の種類を指定する必要はありません。検索の種類を省略した場合は、 BindingFlags.Public | BindingFlags.Instance が適用されます。binder
一連のプロパティを定義し、バインディングを有効にする Binder オブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバの呼び出しなどが含まれます。または
DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing) 。
target
指定したメンバの呼び出し元となる Object 。args
呼び出すメンバに渡される引数を格納する配列。culture
使用するロケールを表す CultureInfo オブジェクト。これは、String 型の数値を Double に変換するなど、ロケール固有の変換を実行するために必要となる場合があります。または
現在のスレッドの CultureInfo を使用する場合は null 参照 (Visual Basic では Nothing) 。
戻り値
呼び出されたメンバの戻り値を表す Object 。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | invokeAttr に CreateInstance が格納されていて、 typeName が null 参照 (Visual Basic では Nothing) です。 |
ArgumentException | args が多次元です。
または invokeAttr が有効な BindingFlags 属性ではありません。 または invokeAttr に、 InvokeMethod 、 GetField 、 SetField 、 GetProperty 、または SetProperty と組み合わされた CreateInstance が格納されています。 または invokeAttr に、 GetField と SetField が格納されています。 または invokeAttr に、 GetProperty と SetProperty が格納されています。 または invokeAttr に、 SetField または SetProperty と組み合わされた InvokeMethod が格納されています。 または invokeAttr に SetField が格納されていて、 args に複数の要素があります。 または このメソッドは COM オブジェクトに対して呼び出され、バインディング フラグ BindingFlags.InvokeMethod 、 BindingFlags.GetProperty 、 BindingFlags.SetProperty 、 BindingFlags.PutDispProperty 、または BindingFlags.PutRefDispProperty が渡されませんでした。 または 名前付きパラメータ配列の 1 つには、 null 参照 (Visual Basic では Nothing) の文字列が含まれています。 |
MethodAccessException | 指定されたメンバがクラス初期化子です。 |
MissingFieldException | フィールドまたはプロパティが見つかりません。 |
MissingMethodException | メソッドが見つかりません。 |
TargetException | 指定されたメンバを target で呼び出すことができません。 |
AmbiguousMatchException | 複数のメソッドがバインディング基準に一致します。 |
解説
既定のバインダは CultureInfo (culture パラメータ) を処理しませんが、 System.Reflection.Binder 抽象クラスを使用して culture を処理するカスタム バインダを記述できます。
次の BindingFlags フィルタ フラグは、検索対象に含めるメンバを定義するために使用できます。
- 戻り値を取得するには、 BindingFlags.Instance または BindingFlags.Static のいずれかを指定する必要があります。
- 検索対象にパブリック メンバを含めるための BindingFlags.Public を指定します。
- 検索対象にパブリックではないメンバ (つまり、プライベート メンバやプロテクト メンバ) を含めるための BindingFlags.NonPublic を指定します。
- 階層構造の上位にある静的メンバを含めるための BindingFlags.FlattenHierarchy を指定します。
次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。
- name の大文字と小文字の違いを無視する場合は BindingFlags.IgnoreCase 。
- 単に継承されただけのメンバではなく、 Type で宣言されたメンバだけを検索する場合は BindingFlags.DeclaredOnly 。
次の BindingFlags 呼び出しフラグは、メンバを使用して実行するアクションを指定するために使用できます。
- コンストラクタを呼び出すための CreateInstance 。name は無視されます。他の呼び出しフラグの場合は無効です。
- メソッドを呼び出すための InvokeMethod 。ただし、コンストラクタや型初期化子は呼び出しません。 SetField または SetProperty の場合は無効です。
- フィールドの値を取得するための GetField 。 SetField の場合は無効です。
- フィールドの値を設定するための SetField 。 GetField の場合は無効です。
- プロパティを取得するための GetProperty 。 SetProperty の場合は無効です。
- プロパティを設定するための SetProperty 。 GetProperty の場合は無効です。
詳細については、「 System.Reflection.BindingFlags 」を参照してください。
次の条件が true の場合は、メソッドが呼び出されます。
- メソッド宣言のパラメータの数が、 args 配列に格納されている引数の数と等しい (メンバに既定の引数が定義されている場合を除く)。
- 各引数の型をバインダによってパラメータの型に変換できる。
バインダは一致するすべてのメソッドを検索します。これらのメソッドは、要求されるバインディングの種類に基づいて検索されます (BindingFlags 値 InvokeMethod 、 GetProperty など)。メソッド セットは、名前、引数の数、バインダで定義されている一連の検索修飾子によってフィルタ処理されます。
メソッドは、選択された後に呼び出されます。その時点で、アクセスできるかどうかが確認されます。検索では、メソッドに関連付けられているアクセシビリティ属性に基づいて、どのメソッド セットを検索するかを制御できます。 Binder クラスの Binder.BindToMethod メソッドは、呼び出すメソッドを選択します。既定のバインダは最も的確に一致したものを選択します。
完全に信頼されているコードに対しては、アクセス制限は無視されます。つまり、コードが完全に信頼されている場合は、プライベートなコンストラクタ、メソッド、フィールド、およびプロパティにアクセスしたり、それらを呼び出すことができます。
BindingFlags.SetField を指定することによって、 Type.InvokeMember を使用してフィールドに特定の値を設定できます。たとえば、F という名前のパブリック インスタンス フィールドにクラス C を設定する場合、F が String であれば、次のようなコードを使用できます。 typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{"strings new value"}, null);
F が String[] の場合、次のようなコードを使用できます。 typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{new String[]{"a","z","c","d"}, null);
これにより、フィールド F が初期化され、新しい配列になります。また、 Type.InvokeMember を使用して、次のようなコードを使用して、値のインデックスを指定してから、その次の値を指定することによって、配列内の位置を設定できます。 typeof(C).InvokeMember("F", BindingFlags.SetField, null, C, new Object{1, "b"}, null);
これによって、F が保持する配列内の文字列 "z" が文字列 "b" に変更されます。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, Common Language Infrastructure (CLI) Standard
.NET Framework セキュリティ:
- ReflectionPermission (非パブリック メンバをリフレクション操作するために必要なアクセス許可) ReflectionPermissionFlag.MemberAccess (関連する列挙体)
- SecurityPermission (アンマネージ コードを呼び出すために必要なアクセス許可) SecurityPermissionFlag.UnmanagedCode (関連する列挙体)
参照
Type クラス | Type メンバ | System 名前空間 | Type.InvokeMember オーバーロードの一覧 | String | Binder | DefaultBinder | BindingFlags | ParameterModifier | ParameterAttributes | CultureInfo | ReflectionPermission