Type.InvokeMember Type.InvokeMember Type.InvokeMember Method

定義

現在の Type の特定のメンバーを呼び出します。Invokes a specific member of the current Type.

オーバーロード

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

派生クラス内でオーバーライドされた場合、指定したバインディング制約を使用し、指定した引数リスト、修飾子、カルチャと照合して、指定されたメンバーを呼び出します。When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[])

指定したバインディング制約を使用し、指定した引数リストと照合して、指定したメンバーを呼び出します。Invokes the specified member, using the specified binding constraints and matching the specified argument list.

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

指定したバインディング制約を使用し、指定したメンバーのうち、指定した引数リストおよびカルチャと一致するメンバーを呼び出します。Invokes the specified member, using the specified binding constraints and matching the specified argument list and culture.

InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

派生クラス内でオーバーライドされた場合、指定したバインディング制約を使用し、指定した引数リスト、修飾子、カルチャと照合して、指定されたメンバーを呼び出します。When overridden in a derived class, invokes the specified member, using the specified binding constraints and matching the specified argument list, modifiers and culture.

public:
 abstract System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
public abstract object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj

パラメーター

name
String String String

呼び出すコンストラクター、メソッド、プロパティ、またはフィールド メンバーの名前を格納している文字列。The string containing the name of the constructor, method, property, or field member to invoke.

- または --or- 既定メンバーを呼び出すための空の文字列 ("")。An empty string ("") to invoke the default member.

または-or- IDispatch メンバーの場合は、"[DispID=3]" のように DispID を表す文字列。For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。A bitwise combination of the enumeration values that specify how the search is conducted. アクセスは、BindingFlagsPublicNonPublicPrivateInvokeMethod など、GetField のうちの 1 つになります。The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. 検索の種類を指定する必要はありません。The type of lookup need not be specified. 検索の種類が省略されている場合は、BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static を使用します。If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

一連のプロパティを定義し、バインディングを有効にするオブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバーの呼び出しなどが含まれます。An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

または-or- DefaultBinder を使用する場合は、null 参照 (Visual Basic の場合は Nothing)。A null reference (Nothing in Visual Basic), to use the DefaultBinder. 可変個の引数を指定してメソッド オーバーロードを正常に呼び出すには、Binder オブジェクトを明示的に定義することが必要な場合があるのでご注意ください。Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

指定したメンバーを呼び出す対象となるオブジェクト。The object on which to invoke the specified member.

args
Object[]

呼び出すメンバーに渡される引数を格納する配列。An array containing the arguments to pass to the member to invoke.

modifiers
ParameterModifier[]

args 配列内の対応する要素に関連付けられている属性を表す ParameterModifier オブジェクトの配列。An array of ParameterModifier objects representing the attributes associated with the corresponding element in the args array. パラメーターに関連付けられた属性は、メンバーのシグネチャに格納されます。A parameter's associated attributes are stored in the member's signature.

既定のバインダーは、COM コンポーネントを呼び出す場合のみ、このパラメーターを処理します。The default binder processes this parameter only when calling a COM component.

culture
CultureInfo CultureInfo CultureInfo

使用するロケールを表す CultureInfo オブジェクト。これは、String 型の数値を Double に変換するなど、ロケール固有の変換を実行するために必要となる場合があります。The CultureInfo object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

または-or- 現在のスレッドの CultureInfo を使用する場合は、null 参照 (Visual Basic の場合は Nothing)。A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

namedParameters
String[]

args 配列内の値が渡されるパラメーターの名前を格納する配列。An array containing the names of the parameters to which the values in the args array are passed.

戻り値

呼び出されるメンバーの戻り値を表すオブジェクト。An object representing the return value of the invoked member.

実装

例外

invokeAttrCreateInstance が含まれず、namenull です。invokeAttr does not contain CreateInstance and name is null.

argsmodifiers の長さが同じではありません。args and modifiers do not have the same length.

または-or- invokeAttr が有効な BindingFlags 属性ではありません。invokeAttr is not a valid BindingFlags attribute.

- または --or- invokeAttr にバインド フラグ InvokeMethodCreateInstanceGetFieldSetFieldGetPropertySetPropertyのいずれかが含まれていません。invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

- または --or- invokeAttr に、 CreateInstanceInvokeMethodGetFieldSetFieldGetPropertySetPropertyとの組み合わせが含まれています。invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

- または --or- invokeAttrGetFieldSetFieldの両方が含まれています。invokeAttr contains both GetField and SetField.

- または --or- invokeAttrGetPropertySetPropertyの両方が含まれています。invokeAttr contains both GetProperty and SetProperty.

- または --or- invokeAttr に、 InvokeMethodSetField または SetPropertyとの組み合わせが含まれています。invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- または --or- invokeAttrSetField が含まれており、 args に複数の要素があります。invokeAttr contains SetField and args has more than one element.

- または --or- 名前付きパラメーター配列が、引数配列よりも長くなっています。The named parameter array is larger than the argument array.

または-or- COM オブジェクトでこのメソッドが呼び出され、バインド フラグ BindingFlags.InvokeMethodBindingFlags.GetPropertyBindingFlags.SetPropertyBindingFlags.PutDispPropertyBindingFlags.PutRefDispProperty のいずれかが渡されませんでした。This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

- または --or- 名前付きパラメーター配列の 1 つに、 nullである文字列が含まれています。One of the named parameter arrays contains a string that is null.

指定されたメンバーは、クラス初期化子です。The specified member is a class initializer.

フィールドまたはプロパティが見つかりません。The field or property cannot be found.

args 内の引数と一致するメソッドが見つかりません。No method can be found that matches the arguments in args.

- または --or- namedParameters の中で引数名が指定されているメンバーが見つかりません。No member can be found that has the argument names supplied in namedParameters.

または-or- 現在の Type オブジェクトは、オープン型のパラメーターを含む型を表します。つまり、ContainsGenericParameterstrue を返します。The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

指定されたメンバーを target で呼び出すことができません。The specified member cannot be invoked on target.

複数のメソッドがバインディングの基準と一致します。More than one method matches the binding criteria.

name によって表されるメソッドに、1 つ以上の未指定のジェネリック型パラメーターがあります。The method represented by name has one or more unspecified generic type parameters. つまり、このメソッドの ContainsGenericParameters プロパティが true を返します。That is, the method's ContainsGenericParameters property returns true.

注釈

InvokeMemberコンストラクターメンバーまたはメソッドメンバーを呼び出し、プロパティメンバーを取得または設定します。または、データフィールドメンバーを取得または設定します。または、配列メンバーの要素を取得または設定します。InvokeMember calls a constructor member or a method member, gets or sets a property member, gets or sets a data field member, or gets or sets an element of an array member.

注意

を使用InvokeMemberしてジェネリックメソッドを呼び出すことはできません。You cannot use InvokeMember to invoke a generic method.

メンバーをIDispatch呼び出す場合は、"[DispID = # #]" という文字列形式を使用して、メンバー名の代わりに DispID を指定できます。When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". たとえば、MyComMethod の DispID が3の場合、"MyComMethod" ではなく "[DispID = 3]" という文字列を指定できます。For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". メンバーを DispID で呼び出す方が、メンバーを名前で検索するよりも高速です。Invoking a member by DispID is faster than looking up the member by name. 複雑な集計シナリオでは、DispID が目的のメンバーを呼び出す唯一の方法である場合があります。In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

既定のバインダーでは、またParameterModifierCultureInfo ( modifiersおよびcultureパラメーター) は処理されませんがSystem.Reflection.Binder 、抽象クラスを使用して、およびmodifiers cultureを処理するカスタムバインダーを作成することができます。.Although the default binder does not process ParameterModifier or CultureInfo (the modifiers and culture parameters), you can use the abstract System.Reflection.Binder class to write a custom binder that does process modifiers and culture. ParameterModifierは COM 相互運用機能を使用してを呼び出す場合にのみ使用され、参照によって渡されるパラメーターのみが処理されます。ParameterModifier is only used when calling through COM interop, and only parameters that are passed by reference are handled.

namedParameters 配列の各パラメーターは、args 配列内の対応する要素の値を取得します。Each parameter in the namedParameters array gets the value in the corresponding element in the args array. args の長さが namedParameters の長さより大きい場合、残りの引数の値は順番に渡されます。If the length of args is greater than the length of namedParameters, the remaining argument values are passed in order.

配列namedParametersは、入力配列内の引数の順序を変更するために使用できます。The namedParameters array can be used to change the order of arguments in an input array. M(string a, int b)たとえば、メソッド (M(ByVal a As String, ByVal b As Integer) Visual Basic) と入力配列{ 42, "x" }を指定した場合、配列{ "b", "a" }がに指定されていれargsば、入力配列をにnamedParameters変更せずに渡すことができます。For example, given the method M(string a, int b) (M(ByVal a As String, ByVal b As Integer) in Visual Basic) and the input array { 42, "x" }, the input array can be passed unchanged to args if the array { "b", "a" } is supplied for namedParameters.

BindingFlagsのフィルターフラグを使用して、検索に含めるメンバーを定義できます。The following BindingFlags filter flags can be used to define which members to include in the search:

  • 検索BindingFlags.Publicにパブリックメンバーを含めるように指定します。Specify BindingFlags.Public to include public members in the search.

  • 検索BindingFlags.NonPublicに非パブリックメンバー (プライベート、内部、およびプロテクトメンバー) を含めるように指定します。Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • BindingFlags.FlattenHierarchy指定すると、階層の上位に静的メンバーが含まれます。Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

BindingFlagsの修飾子フラグを使用して、検索の動作を変更できます。The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCasename大文字と小文字を区別しない場合は。BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnlyで宣言されたメンバーだけをType検索する場合は。単純に継承されたメンバーではありません。BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

BindingFlagsの呼び出しフラグを使用して、メンバーに対して実行するアクションを示すことができます。The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstanceコンストラクターを呼び出す場合は。CreateInstance to invoke a constructor. nameは無視されます。name is ignored. 他の呼び出しフラグと共に使用することはできません。Not valid with other invocation flags.

  • InvokeMethodコンストラクターや型の初期化子ではなく、メソッドを呼び出す場合は。InvokeMethod to invoke a method, but not a constructor or a type initializer. またはでSetFieldSetProperty無効です。Not valid with SetField or SetProperty. InvokeMethod それ自体BindingFlags.Instanceによって指定されBindingFlags.Staticている場合、、、およびが自動的に追加されます。 BindingFlags.PublicIf InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldフィールドの値を取得する場合は。GetField to get the value of a field. SetFieldは無効です。Not valid with SetField.

  • SetFieldフィールドの値を設定する場合は。SetField to set the value of a field. GetFieldは無効です。Not valid with GetField.

  • GetPropertyプロパティを取得する場合は。GetProperty to get a property. SetPropertyは無効です。Not valid with SetProperty.

  • SetPropertyプロパティを設定します。SetProperty to set a property. GetPropertyは無効です。Not valid with GetProperty.

詳細については、「System.Reflection.BindingFlags」を参照してください。See System.Reflection.BindingFlags for more information.

次の両方の条件に該当する場合は、メソッドが呼び出されます。A method will be invoked if both of the following conditions are true:

  • メソッド宣言のパラメーターの数は、 args配列内の引数の数と等しくなります (既定の引数がメンバーに対して定義されていてBindingFlags.OptionalParamBinding 、指定されている場合を除く)。The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • 各引数の型は、バインダーによってパラメーターの型に変換できます。The type of each argument can be converted by the binder to the type of the parameter.

バインダーは、一致するすべてのメソッドを検索します。The binder will find all of the matching methods. これらのメソッドは、要求されたバインディングの種類BindingFlags ( InvokeMethodGetProperty、など) に基づいて検出されます。These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). メソッドのセットは、バインダーで定義されている名前、引数の数、および一連の検索修飾子によってフィルター処理されます。The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

メソッドが選択されると、呼び出されます。After the method is selected, it is invoked. その時点でアクセシビリティがチェックされます。Accessibility is checked at that point. 検索では、メソッドに関連付けられているアクセシビリティ属性に基づいて検索されるメソッドのセットを制御できます。The search may control which set of methods are searched based upon the accessibility attribute associated with the method. クラスのメソッドは、呼び出されるメソッドを選択する役割を担います。 Binder.BindToMethod BinderThe Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. 既定のバインダーでは、最も限定的な一致が選択されます。The default binder selects the most specific match.

InvokeMemberを使用すると、既定値を持つパラメーターを使用してメソッドを呼び出すことができます。InvokeMember can be used to invoke methods with parameters that have default values. これらのメソッドにバインドするにはBindingFlags.OptionalParamBinding 、リフレクションを指定する必要があります。To bind to these methods, Reflection requires BindingFlags.OptionalParamBinding to be specified. 既定値を持つパラメーターの場合は、別の値を指定するか、既定値Missing.Valueを使用するように指定することができます。For a parameter that has a default value, you can either supply a different value, or supply Missing.Value to use the default value.

たとえば、MyMethod (int x, float y = 2.0) などのメソッドについて考えてみます。For example, consider a method such as MyMethod(int x, float y = 2.0). 1番目の引数だけを使用してこのメソッドを呼び出すには、3番目のバインドフラグのいずれかを渡し、2つの引数を渡しMissing.Valueます。つまり、最初の引数と2番目の引数を渡します。To invoke this method with only the first argument as MyMethod(4), pass one of the above binding flags and pass two arguments, namely, 4 for the first argument and Missing.Value for the second argument. を使用Missing.Valueしない限り、 Invokeメソッドで省略可能なパラメーターを省略することはできません。Unless you use Missing.Value, you may not omit optional parameters with the Invoke method. この操作を行う必要があるInvokeMember場合は、代わりにを使用します。If you must do so, use InvokeMember instead.

完全に信頼されたコードでは、アクセス制限は無視されます。つまり、プライベートコンストラクター、メソッド、フィールド、およびプロパティにアクセスして、コードがSystem.Reflection完全に信頼されている場合は、を介して呼び出すことができます。Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

を指定Type.InvokeMember BindingFlags.SetFieldすると、を使用して、フィールドを特定の値に設定できます。You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. たとえば、f という名前のパブリックインスタンスフィールドをクラス C に設定し、f がStringである場合は、次のようなコードを使用できます。For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null, null, null);

F がのString[]場合は、次のようなコードを使用できます。If F is a String[], you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null, null, null);

これにより、フィールド F がこの新しい配列に初期化されます。which will initialize the field F to this new array. また、を使用Type.InvokeMemberして、値のインデックスを指定し、次のようなコードを使用して次の値を指定することによって、配列内の位置を設定することもできます。You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null, null, null);

これにより、F が保持する配列内の文字列 "z" が文字列 "b" に変更されます。This will change string "z" in the array that F holds to string "b".

注意

以降では、このメソッドを使用して、呼び出し元がReflectionPermissionFlag.RestrictedMemberAccessフラグで許可ReflectionPermissionされていて、非パブリックメンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合に、非パブリックメンバーにアクセスできます。 .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1著作.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (「リフレクションのセキュリティに関する考慮事項」を参照してください)。(See Security Considerations for Reflection.)

この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
許可セットに関係なく、非パブリックメンバーにアクセスする場合。for accessing non-public members regardless of their grant set. 関連付けられた列挙型:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
アンマネージコードを呼び出す。to call unmanaged code. 関連付けられた列挙型:UnmanagedCodeAssociated enumeration: UnmanagedCode

こちらもご覧ください

InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[]) InvokeMember(String, BindingFlags, Binder, Object, Object[])

指定したバインディング制約を使用し、指定した引数リストと照合して、指定したメンバーを呼び出します。Invokes the specified member, using the specified binding constraints and matching the specified argument list.

public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj

パラメーター

name
String String String

呼び出すコンストラクター、メソッド、プロパティ、またはフィールド メンバーの名前を格納している文字列。The string containing the name of the constructor, method, property, or field member to invoke.

- または --or- 既定メンバーを呼び出すための空の文字列 ("")。An empty string ("") to invoke the default member.

- または --or- IDispatch メンバーの場合は、"[DispID=3]" のように DispID を表す文字列。For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。A bitwise combination of the enumeration values that specify how the search is conducted. アクセスは、BindingFlagsPublicNonPublicPrivateInvokeMethod など、GetField のうちの 1 つになります。The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. 検索の種類を指定する必要はありません。The type of lookup need not be specified. 検索の種類が省略されている場合は、BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static を使用します。If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

一連のプロパティを定義し、バインディングを有効にするオブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバーの呼び出しなどが含まれます。An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

- または --or- Nothing を使用する場合は、null 参照 (Visual Basic の場合は DefaultBinder)。A null reference (Nothing in Visual Basic), to use the DefaultBinder. 可変個の引数を指定してメソッド オーバーロードを正常に呼び出すには、Binder オブジェクトを明示的に定義することが必要な場合があるのでご注意ください。Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

指定したメンバーを呼び出す対象となるオブジェクト。The object on which to invoke the specified member.

args
Object[]

呼び出すメンバーに渡される引数を格納する配列。An array containing the arguments to pass to the member to invoke.

戻り値

呼び出されるメンバーの戻り値を表すオブジェクト。An object representing the return value of the invoked member.

実装

例外

invokeAttrCreateInstance が含まれず、namenull です。invokeAttr does not contain CreateInstance and name is null.

invokeAttr が有効な BindingFlags 属性ではありません。invokeAttr is not a valid BindingFlags attribute.

- または --or- invokeAttr にバインド フラグ InvokeMethodCreateInstanceGetFieldSetFieldGetPropertySetPropertyのいずれかが含まれていません。invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

- または --or- invokeAttr に、 CreateInstanceInvokeMethodGetFieldSetFieldGetPropertySetPropertyとの組み合わせが含まれています。invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

- または --or- invokeAttrGetFieldSetFieldの両方が含まれています。invokeAttr contains both GetField and SetField.

- または --or- invokeAttrGetPropertySetPropertyの両方が含まれています。invokeAttr contains both GetProperty and SetProperty.

または-or- invokeAttr に、 InvokeMethodSetField または SetPropertyとの組み合わせが含まれています。invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- または --or- invokeAttrSetField が含まれており、 args に複数の要素があります。invokeAttr contains SetField and args has more than one element.

- または --or- COM オブジェクトでこのメソッドが呼び出され、バインド フラグ BindingFlags.InvokeMethodBindingFlags.GetPropertyBindingFlags.SetPropertyBindingFlags.PutDispPropertyBindingFlags.PutRefDispProperty のいずれかが渡されませんでした。This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

または-or- 名前付きパラメーター配列の 1 つに、 nullである文字列が含まれています。One of the named parameter arrays contains a string that is null.

指定されたメンバーは、クラス初期化子です。The specified member is a class initializer.

フィールドまたはプロパティが見つかりません。The field or property cannot be found.

args 内の引数と一致するメソッドが見つかりません。No method can be found that matches the arguments in args.

- または --or- 現在の Type オブジェクトは、オープン型のパラメーターを含む型を表します。つまり、ContainsGenericParameterstrue を返します。The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

指定されたメンバーを target で呼び出すことができません。The specified member cannot be invoked on target.

複数のメソッドがバインディングの基準と一致します。More than one method matches the binding criteria.

現在、.NET Compact Framework は、このメソッドをサポートしていません。The .NET Compact Framework does not currently support this method.

name によって表されるメソッドに、1 つ以上の未指定のジェネリック型パラメーターがあります。The method represented by name has one or more unspecified generic type parameters. つまり、このメソッドの ContainsGenericParameters プロパティが true を返します。That is, the method's ContainsGenericParameters property returns true.

次の例でInvokeMemberは、を使用して、型のメンバーにアクセスします。The following example uses InvokeMember to access members of a type.

using namespace System;
using namespace System::Reflection;

// This sample class has a field, constructor, method, and property.
ref class MyType
{
private:
   Int32 myField;

public:
   MyType( interior_ptr<Int32> x )
   {
       *x *= 5;
   }

   virtual String^ ToString() override
   {
      return myField.ToString();
   }

   property Int32 MyProp 
   {
      Int32 get()
      {
         return myField;
      }

      void set( Int32 value )
      {
         if ( value < 1 )
                  throw gcnew ArgumentOutOfRangeException( "value",value,"value must be > 0" );

         myField = value;
      }
   }
};

int main()
{
   Type^ t = MyType::typeid;

   // Create an instance of a type.
   array<Object^>^args = {8};
   Console::WriteLine( "The value of x before the constructor is called is {0}.", args[ 0 ] );
   Object^ obj = t->InvokeMember( nullptr, static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::CreateInstance), nullptr, nullptr, args );
   Console::WriteLine( "Type: {0}", obj->GetType() );
   Console::WriteLine( "The value of x after the constructor returns is {0}.", args[ 0 ] );

   // Read and write to a field.
   array<Object^>^obj5 = {5};
   t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetField), nullptr, obj, obj5 );
   Int32 v = safe_cast<Int32>(t->InvokeMember( "myField", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetField), nullptr, obj, nullptr ));
   Console::WriteLine( "myField: {0}", v );

   // Call a method.
   String^ s = safe_cast<String^>(t->InvokeMember( "ToString", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::InvokeMethod), nullptr, obj, nullptr ));
   Console::WriteLine( "ToString: {0}", s );

   // Read and write a property. First, attempt to assign an
   // invalid value; then assign a valid value; finally, get
   // the value.
   try
   {
      // Assign the value zero to MyProp. The Property Set 
      // throws an exception, because zero is an invalid value.
      // InvokeMember catches the exception, and throws 
      // TargetInvocationException. To discover the real cause
      // you must catch TargetInvocationException and examine
      // the inner exception. 
      array<Object^>^obj0 = {(int^)0};
      t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj0 );
   }
   catch ( TargetInvocationException^ e ) 
   {
      // If the property assignment failed for some unexpected
      // reason, rethrow the TargetInvocationException.
      if ( e->InnerException->GetType() != ArgumentOutOfRangeException::typeid )
            throw;

      Console::WriteLine( "An invalid value was assigned to MyProp." );
   }

   array<Object^>^obj2 = {2};
   t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::SetProperty), nullptr, obj, obj2 );
   v =  safe_cast<Int32>(t->InvokeMember( "MyProp", static_cast<BindingFlags>(BindingFlags::DeclaredOnly | BindingFlags::Public | BindingFlags::NonPublic | BindingFlags::Instance | BindingFlags::GetProperty), nullptr, obj, nullptr ));
   Console::WriteLine( "MyProp: {0}", v );
}
using System;
using System.Reflection;

// This sample class has a field, constructor, method, and property.
class MyType 
{
    Int32 myField;
    public MyType(ref Int32 x) {x *= 5;}
    public override String ToString() {return myField.ToString();}
    public Int32 MyProp 
    {
        get {return myField;}
        set 
        { 
            if (value < 1) 
                throw new ArgumentOutOfRangeException("value", value, "value must be > 0");
            myField = value;
        }
    }
}

class MyApp 
{
    static void Main() 
    {
        Type t = typeof(MyType);
        // Create an instance of a type.
        Object[] args = new Object[] {8};
        Console.WriteLine("The value of x before the constructor is called is {0}.", args[0]);
        Object obj = t.InvokeMember(null, 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args);
        Console.WriteLine("Type: " + obj.GetType().ToString());
        Console.WriteLine("The value of x after the constructor returns is {0}.", args[0]);

        // Read and write to a field.
        t.InvokeMember("myField", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] {5});
        Int32 v = (Int32) t.InvokeMember("myField", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.GetField, null, obj, null);
        Console.WriteLine("myField: " + v);

        // Call a method.
        String s = (String) t.InvokeMember("ToString", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, null);
        Console.WriteLine("ToString: " + s);

        // Read and write a property. First, attempt to assign an
        // invalid value; then assign a valid value; finally, get
        // the value.
        try 
        {
            // Assign the value zero to MyProp. The Property Set 
            // throws an exception, because zero is an invalid value.
            // InvokeMember catches the exception, and throws 
            // TargetInvocationException. To discover the real cause
            // you must catch TargetInvocationException and examine
            // the inner exception. 
            t.InvokeMember("MyProp", 
                BindingFlags.DeclaredOnly | 
                BindingFlags.Public | BindingFlags.NonPublic | 
                BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {0});
        } 
        catch (TargetInvocationException e) 
        {
            // If the property assignment failed for some unexpected
            // reason, rethrow the TargetInvocationException.
            if (e.InnerException.GetType() != 
                typeof(ArgumentOutOfRangeException)) 
                throw;
            Console.WriteLine("An invalid value was assigned to MyProp.");
        }
        t.InvokeMember("MyProp", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.SetProperty, null, obj, new Object[] {2});
        v = (Int32) t.InvokeMember("MyProp", 
            BindingFlags.DeclaredOnly | 
            BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null);
        Console.WriteLine("MyProp: " + v);
    }
}
Imports System.Reflection

' This sample class has a field, constructor, method, and property.
Class MyType
    Private myField As Int32

    Public Sub New(ByRef x As Int32)
        x *= 5
    End Sub

    Public Overrides Function ToString() As [String]
        Return myField.ToString()
    End Function 'ToString

    Public Property MyProp() As Int32
        Get
            Return myField
        End Get
        Set(ByVal Value As Int32)
            If Value < 1 Then
                Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0")
            End If
            myField = Value
        End Set
    End Property
End Class 'MyType

Class MyApp

    Shared Sub Main()
        Dim t As Type = GetType(MyType)
        ' Create an instance of a type.
        Dim args() As [Object] = {8}
        Console.WriteLine("The value of x before the constructor is called is {0}.", args(0))
        Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args)
        Console.WriteLine("Type: {0}", obj.GetType().ToString())
        Console.WriteLine("The value of x after the constructor returns is {0}.", args(0))

        ' Read and write to a field.
        t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5})
        Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32)
        Console.WriteLine("myField: {0}", v)

        ' Call a method.
        Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String])
        Console.WriteLine("ToString: {0}", s)

        ' Read and write a property. First, attempt to assign an
        ' invalid value; then assign a valid value; finally, get
        ' the value.
        Try
            ' Assign the value zero to MyProp. The Property Set 
            ' throws an exception, because zero is an invalid value.
            ' InvokeMember catches the exception, and throws 
            ' TargetInvocationException. To discover the real cause
            ' you must catch TargetInvocationException and examine
            ' the inner exception. 
            t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0})
        Catch e As TargetInvocationException
            ' If the property assignment failed for some unexpected
            ' reason, rethrow the TargetInvocationException.
            If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then
                Throw
            End If
            Console.WriteLine("An invalid value was assigned to MyProp.")
        End Try
        t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2})
        v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32)
        Console.WriteLine("MyProp: {0}", v)
    End Sub
End Class 'MyApp

注釈

注意

を使用InvokeMemberしてジェネリックメソッドを呼び出すことはできません。You cannot use InvokeMember to invoke a generic method.

BindingFlagsのフィルターフラグを使用して、検索に含めるメンバーを定義できます。The following BindingFlags filter flags can be used to define which members to include in the search:

  • 検索BindingFlags.Publicにパブリックメンバーを含めるように指定します。Specify BindingFlags.Public to include public members in the search.

  • BindingFlags.NonPublic指定すると、パブリックでないメンバー (つまり、プライベートメンバーとプロテクトメンバー) を検索に含めることができます。Specify BindingFlags.NonPublic to include non-public members (that is, private and protected members) in the search.

  • BindingFlags.FlattenHierarchy指定すると、階層の上位に静的メンバーが含まれます。Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

BindingFlagsの修飾子フラグを使用して、検索の動作を変更できます。The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCasename大文字と小文字を区別しない場合は。BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnlyで宣言されたメンバーだけをType検索する場合は。単純に継承されたメンバーではありません。BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

BindingFlagsの呼び出しフラグを使用して、メンバーに対して実行するアクションを示すことができます。The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstanceコンストラクターを呼び出す場合は。CreateInstance to invoke a constructor. nameは無視されます。name is ignored. 他の呼び出しフラグと共に使用することはできません。Not valid with other invocation flags.

  • InvokeMethodコンストラクターや型の初期化子ではなく、メソッドを呼び出す場合は。InvokeMethod to invoke a method, but not a constructor or a type initializer. またはでSetFieldSetProperty無効です。Not valid with SetField or SetProperty. InvokeMethod それ自体BindingFlags.Instanceによって指定されBindingFlags.Staticている場合、、、およびが自動的に追加されます。 BindingFlags.PublicIf InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldフィールドの値を取得する場合は。GetField to get the value of a field. SetFieldは無効です。Not valid with SetField.

  • SetFieldフィールドの値を設定する場合は。SetField to set the value of a field. GetFieldは無効です。Not valid with GetField.

  • GetPropertyプロパティを取得する場合は。GetProperty to get a property. SetPropertyは無効です。Not valid with SetProperty.

  • SetPropertyプロパティを設定します。SetProperty to set a property. GetPropertyは無効です。Not valid with GetProperty.

詳細については、「System.Reflection.BindingFlags」を参照してください。See System.Reflection.BindingFlags for more information.

次の両方の条件に該当する場合は、メソッドが呼び出されます。A method will be invoked if both of the following conditions are true:

  • メソッド宣言のパラメーターの数は、 args配列内の引数の数と等しくなります (既定の引数がメンバーに対して定義されていてBindingFlags.OptionalParamBinding 、指定されている場合を除く)。The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • 各引数の型は、バインダーによってパラメーターの型に変換できます。The type of each argument can be converted by the binder to the type of the parameter.

バインダーは、一致するすべてのメソッドを検索します。The binder will find all of the matching methods. これらのメソッドは、要求されたバインディングの種類BindingFlags ( InvokeMethodGetProperty、など) に基づいて検出されます。These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). メソッドのセットは、バインダーで定義されている名前、引数の数、および一連の検索修飾子によってフィルター処理されます。The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

メソッドが選択されると、呼び出されます。After the method is selected, it is invoked. その時点でアクセシビリティがチェックされます。Accessibility is checked at that point. 検索では、メソッドに関連付けられているアクセシビリティ属性に基づいて検索されるメソッドのセットを制御できます。The search may control which set of methods are searched based upon the accessibility attribute associated with the method. クラスのメソッドは、呼び出されるメソッドを選択する役割を担います。 Binder.BindToMethod BinderThe Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. 既定のバインダーでは、最も限定的な一致が選択されます。The default binder selects the most specific match.

完全に信頼されたコードでは、アクセス制限は無視されます。つまり、プライベートコンストラクター、メソッド、フィールド、およびプロパティにアクセスして、コードがSystem.Reflection完全に信頼されている場合は、を介して呼び出すことができます。Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through System.Reflection whenever the code is fully trusted.

を指定Type.InvokeMember BindingFlags.SetFieldすると、を使用して、フィールドを特定の値に設定できます。You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. たとえば、f という名前のパブリックインスタンスフィールドをクラス C に設定し、f がStringである場合は、次のようなコードを使用できます。For example, if you want to set a public instance field named F on class C, and F is a String, you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"});

F がのString[]場合は、次のようなコードを使用できます。If F is a String[], you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}});

これにより、フィールド F がこの新しい配列に初期化されます。which will initialize the field F to this new array. また、を使用Type.InvokeMemberして、値のインデックスを指定し、次のようなコードを使用して次の値を指定することによって、配列内の位置を設定することもできます。You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"});

これにより、F が保持する配列内の文字列 "z" が文字列 "b" に変更されます。This will change string "z" in the array that F holds to string "b".

IDispatchメンバーを呼び出す場合は、"[DispID = # #]" という文字列形式を使用して、メンバー名の代わりに DispID を指定できます。When you invoke an IDispatch member, you can specify the DispID instead of the member name, using the string format "[DispID=##]". たとえば、MyComMethod の DispID が3の場合、"MyComMethod" ではなく "[DispID = 3]" という文字列を指定できます。For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". メンバーを DispID で呼び出す方が、メンバーを名前で検索するよりも高速です。Invoking a member by DispID is faster than looking up the member by name. 複雑な集計シナリオでは、DispID が目的のメンバーを呼び出す唯一の方法である場合があります。In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

注意

以降では、このメソッドを使用して、呼び出し元がReflectionPermissionFlag.RestrictedMemberAccessフラグで許可ReflectionPermissionされていて、非パブリックメンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合に、非パブリックメンバーにアクセスできます。 .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1著作.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (「リフレクションのセキュリティに関する考慮事項」を参照してください)。(See Security Considerations for Reflection.)

この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
許可セットに関係なく、非パブリックメンバーにアクセスする場合。for accessing non-public members regardless of their grant set. 関連付けられた列挙型:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
アンマネージコードを呼び出す。to call unmanaged code. 関連付けられた列挙型:UnmanagedCodeAssociated enumeration: UnmanagedCode

こちらもご覧ください

InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo) InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

指定したバインディング制約を使用し、指定したメンバーのうち、指定した引数リストおよびカルチャと一致するメンバーを呼び出します。Invokes the specified member, using the specified binding constraints and matching the specified argument list and culture.

public:
 virtual System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
override this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj

パラメーター

name
String String String

呼び出すコンストラクター、メソッド、プロパティ、またはフィールド メンバーの名前を格納している文字列。The string containing the name of the constructor, method, property, or field member to invoke.

- または --or- 既定メンバーを呼び出すための空の文字列 ("")。An empty string ("") to invoke the default member.

- または --or- IDispatch メンバーの場合は、"[DispID=3]" のように DispID を表す文字列。For IDispatch members, a string representing the DispID, for example "[DispID=3]".

invokeAttr
BindingFlags BindingFlags BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。A bitwise combination of the enumeration values that specify how the search is conducted. アクセスは、BindingFlagsPublicNonPublicPrivateInvokeMethod など、GetField のうちの 1 つになります。The access can be one of the BindingFlags such as Public, NonPublic, Private, InvokeMethod, GetField, and so on. 検索の種類を指定する必要はありません。The type of lookup need not be specified. 検索の種類が省略されている場合は、BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static を使用します。If the type of lookup is omitted, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static are used.

binder
Binder Binder Binder

一連のプロパティを定義し、バインディングを有効にするオブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバーの呼び出しなどが含まれます。An object that defines a set of properties and enables binding, which can involve selection of an overloaded method, coercion of argument types, and invocation of a member through reflection.

- または --or- Nothing を使用する場合は、null 参照 (Visual Basic の場合は DefaultBinder)。A null reference (Nothing in Visual Basic), to use the DefaultBinder. 可変個の引数を指定してメソッド オーバーロードを正常に呼び出すには、Binder オブジェクトを明示的に定義することが必要な場合があるのでご注意ください。Note that explicitly defining a Binder object may be required for successfully invoking method overloads with variable arguments.

target
Object Object Object

指定したメンバーを呼び出す対象となるオブジェクト。The object on which to invoke the specified member.

args
Object[]

呼び出すメンバーに渡される引数を格納する配列。An array containing the arguments to pass to the member to invoke.

culture
CultureInfo CultureInfo CultureInfo

使用するグローバリゼーション ロケールを表すオブジェクト。これは、String 型の数値を Double に変換するなど、ロケール固有の変換を実行するために必要となる場合があります。The object representing the globalization locale to use, which may be necessary for locale-specific conversions, such as converting a numeric String to a Double.

- または --or- 現在のスレッドの CultureInfo を使用する場合は、null 参照 (Visual Basic の場合は Nothing)。A null reference (Nothing in Visual Basic) to use the current thread's CultureInfo.

戻り値

呼び出されるメンバーの戻り値を表すオブジェクト。An object representing the return value of the invoked member.

実装

例外

invokeAttrCreateInstance が含まれず、namenull です。invokeAttr does not contain CreateInstance and name is null.

invokeAttr が有効な BindingFlags 属性ではありません。invokeAttr is not a valid BindingFlags attribute.

または-or- invokeAttr にバインド フラグ InvokeMethodCreateInstanceGetFieldSetFieldGetPropertySetPropertyのいずれかが含まれていません。invokeAttr does not contain one of the following binding flags: InvokeMethod, CreateInstance, GetField, SetField, GetProperty, or SetProperty.

- または --or- invokeAttr に、 CreateInstanceInvokeMethodGetFieldSetFieldGetPropertySetPropertyとの組み合わせが含まれています。invokeAttr contains CreateInstance combined with InvokeMethod, GetField, SetField, GetProperty, or SetProperty.

または-or- invokeAttrGetFieldSetFieldの両方が含まれています。invokeAttr contains both GetField and SetField.

- または --or- invokeAttrGetPropertySetPropertyの両方が含まれています。invokeAttr contains both GetProperty and SetProperty.

- または --or- invokeAttr に、 InvokeMethodSetField または SetPropertyとの組み合わせが含まれています。invokeAttr contains InvokeMethod combined with SetField or SetProperty.

- または --or- invokeAttrSetField が含まれており、 args に複数の要素があります。invokeAttr contains SetField and args has more than one element.

- または --or- COM オブジェクトでこのメソッドが呼び出され、バインド フラグ BindingFlags.InvokeMethodBindingFlags.GetPropertyBindingFlags.SetPropertyBindingFlags.PutDispPropertyBindingFlags.PutRefDispProperty のいずれかが渡されませんでした。This method is called on a COM object and one of the following binding flags was not passed in: BindingFlags.InvokeMethod, BindingFlags.GetProperty, BindingFlags.SetProperty, BindingFlags.PutDispProperty, or BindingFlags.PutRefDispProperty.

- または --or- 名前付きパラメーター配列の 1 つに、 nullである文字列が含まれています。One of the named parameter arrays contains a string that is null.

指定されたメンバーは、クラス初期化子です。The specified member is a class initializer.

フィールドまたはプロパティが見つかりません。The field or property cannot be found.

args 内の引数と一致するメソッドが見つかりません。No method can be found that matches the arguments in args.

- または --or- 現在の Type オブジェクトは、オープン型のパラメーターを含む型を表します。つまり、ContainsGenericParameterstrue を返します。The current Type object represents a type that contains open type parameters, that is, ContainsGenericParameters returns true.

指定されたメンバーを target で呼び出すことができません。The specified member cannot be invoked on target.

複数のメソッドがバインディングの基準と一致します。More than one method matches the binding criteria.

name によって表されるメソッドに、1 つ以上の未指定のジェネリック型パラメーターがあります。The method represented by name has one or more unspecified generic type parameters. つまり、このメソッドの ContainsGenericParameters プロパティが true を返します。That is, the method's ContainsGenericParameters property returns true.

注釈

既定CultureInfoのバインダーではculture (パラメーター) は処理されませんが、抽象System.Reflection.Binderクラスを使用して、処理cultureを実行するカスタムバインダーを書き込むことができます。Although the default binder does not process CultureInfo (the culture parameter), you can use the abstract System.Reflection.Binder class to write a custom binder that does process culture.

注意

を使用InvokeMemberしてジェネリックメソッドを呼び出すことはできません。You cannot use InvokeMember to invoke a generic method.

BindingFlagsのフィルターフラグを使用して、検索に含めるメンバーを定義できます。The following BindingFlags filter flags can be used to define which members to include in the search:

  • 検索BindingFlags.Publicにパブリックメンバーを含めるように指定します。Specify BindingFlags.Public to include public members in the search.

  • 検索BindingFlags.NonPublicに非パブリックメンバー (プライベート、内部、およびプロテクトメンバー) を含めるように指定します。Specify BindingFlags.NonPublic to include non-public members (that is, private, internal, and protected members) in the search.

  • BindingFlags.FlattenHierarchy指定すると、階層の上位に静的メンバーが含まれます。Specify BindingFlags.FlattenHierarchy to include static members up the hierarchy.

BindingFlagsの修飾子フラグを使用して、検索の動作を変更できます。The following BindingFlags modifier flags can be used to change how the search works:

  • BindingFlags.IgnoreCasename大文字と小文字を区別しない場合は。BindingFlags.IgnoreCase to ignore the case of name.

  • BindingFlags.DeclaredOnlyで宣言されたメンバーだけをType検索する場合は。単純に継承されたメンバーではありません。BindingFlags.DeclaredOnly to search only the members declared on the Type, not members that were simply inherited.

BindingFlagsの呼び出しフラグを使用して、メンバーに対して実行するアクションを示すことができます。The following BindingFlags invocation flags can be used to denote what action to take with the member:

  • CreateInstanceコンストラクターを呼び出す場合は。CreateInstance to invoke a constructor. nameは無視されます。name is ignored. 他の呼び出しフラグと共に使用することはできません。Not valid with other invocation flags.

  • InvokeMethodコンストラクターや型の初期化子ではなく、メソッドを呼び出す場合は。InvokeMethod to invoke a method, but not a constructor or a type initializer. またはでSetFieldSetProperty無効です。Not valid with SetField or SetProperty. InvokeMethod それ自体BindingFlags.Instanceによって指定されBindingFlags.Staticている場合、、、およびが自動的に追加されます。 BindingFlags.PublicIf InvokeMethod is specified by itself, BindingFlags.Public, BindingFlags.Instance, and BindingFlags.Static are automatically included.

  • GetFieldフィールドの値を取得する場合は。GetField to get the value of a field. SetFieldは無効です。Not valid with SetField.

  • SetFieldフィールドの値を設定する場合は。SetField to set the value of a field. GetFieldは無効です。Not valid with GetField.

  • GetPropertyプロパティを取得する場合は。GetProperty to get a property. SetPropertyは無効です。Not valid with SetProperty.

  • SetPropertyプロパティを設定します。SetProperty to set a property. GetPropertyは無効です。Not valid with GetProperty.

詳細については、「System.Reflection.BindingFlags」を参照してください。See System.Reflection.BindingFlags for more information.

次の両方の条件に該当する場合は、メソッドが呼び出されます。A method will be invoked if both of the following conditions are true:

  • メソッド宣言のパラメーターの数は、 args配列内の引数の数と等しくなります (既定の引数がメンバーに対して定義されていてBindingFlags.OptionalParamBinding 、指定されている場合を除く)。The number of parameters in the method declaration equals the number of arguments in the args array (unless default arguments are defined on the member and BindingFlags.OptionalParamBinding is specified).

  • 各引数の型は、バインダーによってパラメーターの型に変換できます。The type of each argument can be converted by the binder to the type of the parameter.

バインダーは、一致するすべてのメソッドを検索します。The binder will find all of the matching methods. これらのメソッドは、要求されたバインディングの種類BindingFlags ( InvokeMethodGetProperty、など) に基づいて検出されます。These methods are found based upon the type of binding requested (BindingFlags values InvokeMethod, GetProperty, and so on). メソッドのセットは、バインダーで定義されている名前、引数の数、および一連の検索修飾子によってフィルター処理されます。The set of methods is filtered by the name, number of arguments, and a set of search modifiers defined in the binder.

メソッドが選択されると、呼び出されます。After the method is selected, it is invoked. その時点でアクセシビリティがチェックされます。Accessibility is checked at that point. 検索では、メソッドに関連付けられているアクセシビリティ属性に基づいて検索されるメソッドのセットを制御できます。The search may control which set of methods are searched based upon the accessibility attribute associated with the method. クラスのメソッドは、呼び出されるメソッドを選択する役割を担います。 Binder.BindToMethod BinderThe Binder.BindToMethod method of the Binder class is responsible for selecting the method to be invoked. 既定のバインダーでは、最も限定的な一致が選択されます。The default binder selects the most specific match.

完全に信頼されたコードでは、アクセス制限は無視されます。つまり、プライベートコンストラクター、メソッド、フィールド、およびプロパティには、コードが完全に信頼されている場合は常に、リフレクションを介してアクセスして呼び出すことができます。Access restrictions are ignored for fully trusted code; that is, private constructors, methods, fields, and properties can be accessed and invoked through Reflection whenever the code is fully trusted.

を指定Type.InvokeMember BindingFlags.SetFieldすると、を使用して、フィールドを特定の値に設定できます。You can use Type.InvokeMember to set a field to a particular value by specifying BindingFlags.SetField. たとえば、クラス C で f という名前のパブリックインスタンスフィールドを設定し、f がでStringある場合は、次のようなコードを使用できます。For example, if you want to set a public instance field named F on class C, and F is a String you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {"strings new value"}, null);

F がのString[]場合は、次のようなコードを使用できます。If F is a String[], you can use code such as:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {new String[]{"a","z","c","d"}}, null);

これにより、フィールド F がこの新しい配列に初期化されます。which will initialize the field F to this new array. また、を使用Type.InvokeMemberして、値のインデックスを指定し、次のようなコードを使用して次の値を指定することによって、配列内の位置を設定することもできます。You can also use Type.InvokeMember to set a position in an array by supplying the index of the value and then the next value by using code such as the following:

typeof(C).InvokeMember("F", BindingFlags.SetField, null, c, new Object[] {1, "b"}, null);

これにより、F が保持する配列内の文字列 "z" が文字列 "b" に変更されます。This will change string "z" in the array that F holds to string "b".

メンバーをIDispatch呼び出す場合は、"[DispID = # #]" という文字列形式を使用して、メンバー名の代わりに DispID を指定できます。When you invoke an IDispatch member you can specify the DispID instead of the member name, using the string format "[DispID=##]". たとえば、MyComMethod の DispID が3の場合、"MyComMethod" ではなく "[DispID = 3]" という文字列を指定できます。For example, if the DispID of MyComMethod is 3, you can specify the string "[DispID=3]" instead of "MyComMethod". メンバーを DispID で呼び出す方が、メンバーを名前で検索するよりも高速です。Invoking a member by DispID is faster than looking up the member by name. 複雑な集計シナリオでは、DispID が目的のメンバーを呼び出す唯一の方法である場合があります。In complex aggregation scenarios, the DispID is sometimes the only way to invoke the desired member.

注意

以降では、このメソッドを使用して、呼び出し元がReflectionPermissionFlag.RestrictedMemberAccessフラグで許可ReflectionPermissionされていて、非パブリックメンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合に、非パブリックメンバーにアクセスできます。 .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1著作.Starting with the .NET Framework 2.0 Service Pack 1.NET Framework 2.0 Service Pack 1, this method can be used to access non-public members if the caller has been granted ReflectionPermission with the ReflectionPermissionFlag.RestrictedMemberAccess flag and if the grant set of the non-public members is restricted to the caller's grant set, or a subset thereof. (「リフレクションのセキュリティに関する考慮事項」を参照してください)。(See Security Considerations for Reflection.)

この機能を使用するには、アプリケーションで .NET Framework 3.5.NET Framework 3.5 以降を対象とする必要があります。To use this functionality, your application should target the .NET Framework 3.5.NET Framework 3.5 or later.

セキュリティ

ReflectionPermission
許可セットに関係なく、非パブリックメンバーにアクセスする場合。for accessing non-public members regardless of their grant set. 関連付けられた列挙型:MemberAccessAssociated enumeration: MemberAccess

SecurityPermission
アンマネージコードを呼び出す。to call unmanaged code. 関連付けられた列挙型:UnmanagedCodeAssociated enumeration: UnmanagedCode

こちらもご覧ください

適用対象