Type.InvokeMember メソッド

定義

現在の Type の特定のメンバーを呼び出します。

オーバーロード

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

派生クラス内でオーバーライドされた場合、指定したバインディング制約を使用し、指定した引数リスト、修飾子、カルチャと照合して、指定されたメンバーを呼び出します。

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

指定したバインディング制約を使用し、指定したメンバーのうち、指定した引数リストおよびカルチャと一致するメンバーを呼び出します。

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

指定したバインディング制約を使用し、指定した引数リストと照合して、指定したメンバーを呼び出します。

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

派生クラス内でオーバーライドされた場合、指定したバインディング制約を使用し、指定した引数リスト、修飾子、カルチャと照合して、指定されたメンバーを呼び出します。

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);
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
Public MustOverride Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object

パラメーター

name
String

呼び出すコンストラクター、メソッド、プロパティ、またはフィールド メンバーの名前を格納している文字列。

または 既定メンバーを呼び出すための空の文字列 ("")。

または IDispatch メンバーの場合は、"[DispID=3]" のように DispID を表す文字列。

invokeAttr
BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。 アクセスは、BindingFlagsPublicNonPublicPrivateInvokeMethod など、GetField のうちの 1 つになります。 検索の種類を指定する必要はありません。 検索の種類が省略されている場合は、BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static を使用します。

binder
Binder

一連のプロパティを定義し、バインディングを有効にするオブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバーの呼び出しなどが含まれます。

または DefaultBinder を使用する場合は、null 参照 (Visual Basic の場合は Nothing)。 可変個の引数を指定してメソッド オーバーロードを正常に呼び出すには、Binder オブジェクトを明示的に定義することが必要な場合があるのでご注意ください。

target
Object

指定したメンバーを呼び出す対象となるオブジェクト。

args
Object[]

呼び出すメンバーに渡される引数を格納する配列。

modifiers
ParameterModifier[]

args 配列内の対応する要素に関連付けられている属性を表す ParameterModifier オブジェクトの配列。 パラメーターに関連付けられた属性は、メンバーのシグネチャに格納されます。

既定のバインダーは、COM コンポーネントを呼び出す場合のみ、このパラメーターを処理します。

culture
CultureInfo

使用するロケールを表す CultureInfo オブジェクト。これは、String 型の数値を Double に変換するなど、ロケール固有の変換を実行するために必要となる場合があります。

または 現在のスレッドの CultureInfo を使用する場合は、null 参照 (Visual Basic の場合は Nothing)。

namedParameters
String[]

args 配列内の値が渡されるパラメーターの名前を格納する配列。

戻り値

Object

呼び出されるメンバーの戻り値を表すオブジェクト。

実装

例外

invokeAttrCreateInstance が含まれず、namenull です。

argsmodifiers の長さが同じではありません。

または invokeAttr が有効な BindingFlags 属性ではありません。

または invokeAttr にバインド フラグ InvokeMethodCreateInstanceGetFieldSetFieldGetPropertySetPropertyのいずれかが含まれていません。

または invokeAttr に、 CreateInstanceInvokeMethodGetFieldSetFieldGetPropertySetPropertyとの組み合わせが含まれています。

または invokeAttrGetFieldSetFieldの両方が含まれています。

または invokeAttrGetPropertySetPropertyの両方が含まれています。

または invokeAttr に、 InvokeMethodSetField または SetPropertyとの組み合わせが含まれています。

または invokeAttrSetField が含まれており、 args に複数の要素があります。

または 名前付きパラメーター配列が、引数配列よりも長くなっています。

または COM オブジェクトでこのメソッドが呼び出され、バインド フラグ BindingFlags.InvokeMethodBindingFlags.GetPropertyBindingFlags.SetPropertyBindingFlags.PutDispPropertyBindingFlags.PutRefDispProperty のいずれかが渡されませんでした。

または 名前付きパラメーター配列の 1 つに、 nullである文字列が含まれています。

指定されたメンバーは、クラス初期化子です。

フィールドまたはプロパティが見つかりません。

args 内の引数と一致するメソッドが見つかりません。

または namedParameters の中で引数名が指定されているメンバーが見つかりません。

または 現在の Type オブジェクトは、オープン型のパラメーターを含む型を表します。つまり、ContainsGenericParameterstrue を返します。

指定されたメンバーを target で呼び出すことができません。

複数のメソッドがバインディングの基準と一致します。

name によって表されるメソッドに、1 つ以上の未指定のジェネリック型パラメーターがあります。 つまり、このメソッドの ContainsGenericParameters プロパティが true を返します。

注釈

InvokeMember は、コンストラクター メンバーまたはメソッド メンバーを呼び出したり、プロパティ メンバーを取得または設定したり、データ フィールド メンバーを取得または設定したり、配列メンバーの要素を取得または設定したりします。

注意

を使用して InvokeMember ジェネリック メソッドを呼び出すすることはできません。

メンバーを呼び出す場合は、文字列形式 "[DispID=##]" を使用して、メンバー名の代わりに IDispatch DispID を指定できます。 たとえば、MyComMethod の DispID が 3 の場合は、"MyComMethod" ではなく文字列 "[DispID=3]" を指定できます。 DispID でメンバーを呼び出す方が、メンバーを名前で検索するよりも高速です。 複雑な集計シナリオでは、DispID が目的のメンバーを呼び出す唯一の方法である場合があります。

既定のバインダーでは または (および パラメーター) は処理されませんが、 抽象クラスを使用して、 と を処理するカスタム バインダー ParameterModifier CultureInfo modifiers culture System.Reflection.Binder を記述 modifiers できます cultureParameterModifier は COM 相互運用を介して を呼び出す場合にのみ使用され、参照によって渡されるパラメーターだけが処理されます。

namedParameters 配列の各パラメーターは、args 配列内の対応する要素の値を取得します。 args の長さが namedParameters の長さより大きい場合、残りの引数の値は順番に渡されます。

配列 namedParameters を使用して、入力配列内の引数の順序を変更できます。 たとえば、 メソッド (Visual Basic) と入力配列 を指定すると、配列が に指定されている場合、入力配列は に変更されず M(string a, int b) M(ByVal a As String, ByVal b As Integer) { 42, "x" } args { "b", "a" } に渡されます namedParameters

検索に BindingFlags 含めるメンバーを定義するには、次のフィルター フラグを使用できます。

  • 検索 BindingFlags.Public にパブリック メンバーを含めるには、 を指定します。

  • 非パブリック メンバー (つまり、プライベート、内部、および保護されたメンバー) を検索に含 BindingFlags.NonPublic める場合に指定します。

  • 階層 BindingFlags.FlattenHierarchy の上に静的メンバーを含める場合に指定します。

検索のしくみ BindingFlags を変更するには、次の修飾子フラグを使用できます。

  • BindingFlags.IgnoreCase の大文字と小文字を無視する場合 name は 。

  • BindingFlags.DeclaredOnly 単純に継承されたメンバーではなく、 で宣言されたメンバー Type のみを検索する場合は 。

次の BindingFlags 呼び出しフラグを使用して、メンバーに対して実行するアクションを示します。

  • CreateInstance コンストラクターを呼び出す場合は 。 name は無視されます。 他の呼び出しフラグでは無効です。

  • InvokeMethod メソッドを呼び出す場合は 。コンストラクターや型初期化子は呼び出しません。 または では無効 SetField です SetProperty 。 が InvokeMethod それ自体で指定されている場合 BindingFlags.Public BindingFlags.Instance 、、、および BindingFlags.Static は自動的に含まれます。

  • GetField フィールドの値を取得する場合は 。 では無効です SetField

  • SetField フィールドの値を設定する場合は 。 では無効です GetField

  • GetProperty プロパティを取得する場合は 。 では無効です SetProperty

  • SetProperty プロパティを設定する場合は 。 では無効です GetProperty

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

次の両方の条件に当てはまる場合、メソッドが呼び出されます。

  • メソッド宣言内のパラメーターの数は、配列内の引数の数と等しくなります (既定の引数がメンバーに対して定義され args 、指定されていない BindingFlags.OptionalParamBinding 限り)。

  • 各引数の型は、バインダーによって パラメーターの型に変換できます。

バインダーは、一致するすべてのメソッドを検索します。 これらのメソッドは、要求されたバインディングの種類 (値 BindingFlags InvokeMethod GetProperty 、、など) に基づいて検出されます。 メソッドのセットは、名前、引数の数、およびバインダーで定義された一連の検索修飾子によってフィルター処理されます。

メソッドが選択されると、呼び出されます。 その時点でアクセシビリティがチェックされます。 検索では、 メソッドに関連付けられているアクセシビリティ属性に基づいて、検索されるメソッドのセットを制御できます。 クラス Binder.BindToMethod の メソッド Binder は、呼び出されるメソッドを選択する必要があります。 既定のバインダーは、最も具体的な一致を選択します。

InvokeMember は、既定値を持つパラメーターを持つメソッドを呼び出す場合に使用できます。 これらのメソッドにバインドするには、Reflection を BindingFlags.OptionalParamBinding 指定する必要があります。 既定値を持つパラメーターの場合は、別の値を指定するか、既定値を使用 Missing.Value するために を指定できます。

たとえば、MyMethod(int x, float y = 2.0) などのメソッドについて考えてください。 最初の引数のみを MyMethod(4) として指定してこのメソッドを呼び出す場合は、上記のいずれかのバインド フラグを渡し、2 つの引数 (つまり、最初の引数に 4、2 番目の引数に 4) を渡します。 Missing.Value を使用しない限り Missing.Value 、 メソッドで省略可能なパラメーターを省略 Invoke することはできません。 これを行う必要がある場合は、代わりに を InvokeMember 使用します。

完全に信頼されたコードでは、アクセス制限は無視されます。つまり、プライベート コンストラクター、メソッド、フィールド、およびプロパティは、コードが完全に信頼されている場合は常に を通じて System.Reflection アクセスおよび呼び出すことができます。

を使用して Type.InvokeMember 、 を指定してフィールドを特定の値に設定できます BindingFlags.SetField 。 たとえば、クラス C に F という名前のパブリック インスタンス フィールドを設定し、F を に設定する場合は、 String 次のようなコードを使用できます。

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

F が の場合 String[] は、次のようなコードを使用できます。

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

フィールド F をこの新しい配列に初期化します。 を使用して、次のようなコードを使用して値のインデックスを指定し、次の値を指定して配列内の Type.InvokeMember 位置を設定できます。

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

これにより、F が保持する配列内の文字列 "z" が文字列 "b" に変更されます。

注意

.NET Framework 2.0 Service Pack 1 より、呼び出し元に フラグが付与されている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合は、このメソッドを使用して非パブリック メンバーにアクセスできます。 ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess (「 リフレクションのセキュリティに関する考慮事項」を参照してください)。

この機能を使用するには、アプリケーションが 3.5 以降.NET Frameworkターゲットとする必要があります。

こちらもご覧ください

適用対象

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

指定したバインディング制約を使用し、指定したメンバーのうち、指定した引数リストおよびカルチャと一致するメンバーを呼び出します。

public:
 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:
 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);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Globalization.CultureInfo culture);
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
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
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), culture As CultureInfo) As Object

パラメーター

name
String

呼び出すコンストラクター、メソッド、プロパティ、またはフィールド メンバーの名前を格納している文字列。

または 既定メンバーを呼び出すための空の文字列 ("")。

または IDispatch メンバーの場合は、"[DispID=3]" のように DispID を表す文字列。

invokeAttr
BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。 アクセスは、BindingFlagsPublicNonPublicPrivateInvokeMethod など、GetField のうちの 1 つになります。 検索の種類を指定する必要はありません。 検索の種類が省略されている場合は、BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static を使用します。

binder
Binder

一連のプロパティを定義し、バインディングを有効にするオブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバーの呼び出しなどが含まれます。

または Nothing を使用する場合は、null 参照 (Visual Basic の場合は DefaultBinder)。 可変個の引数を指定してメソッド オーバーロードを正常に呼び出すには、Binder オブジェクトを明示的に定義することが必要な場合があるのでご注意ください。

target
Object

指定したメンバーを呼び出す対象となるオブジェクト。

args
Object[]

呼び出すメンバーに渡される引数を格納する配列。

culture
CultureInfo

使用するグローバリゼーション ロケールを表すオブジェクト。これは、String 型の数値を Double に変換するなど、ロケール固有の変換を実行するために必要となる場合があります。

または 現在のスレッドの CultureInfo を使用する場合は、null 参照 (Visual Basic の場合は Nothing)。

戻り値

Object

呼び出されるメンバーの戻り値を表すオブジェクト。

実装

例外

invokeAttrCreateInstance が含まれず、namenull です。

invokeAttr が有効な BindingFlags 属性ではありません。

または invokeAttr にバインド フラグ InvokeMethodCreateInstanceGetFieldSetFieldGetPropertySetPropertyのいずれかが含まれていません。

または invokeAttr に、 CreateInstanceInvokeMethodGetFieldSetFieldGetPropertySetPropertyとの組み合わせが含まれています。

または invokeAttrGetFieldSetFieldの両方が含まれています。

または invokeAttrGetPropertySetPropertyの両方が含まれています。

または invokeAttr に、 InvokeMethodSetField または SetPropertyとの組み合わせが含まれています。

または invokeAttrSetField が含まれており、 args に複数の要素があります。

または COM オブジェクトでこのメソッドが呼び出され、バインド フラグ BindingFlags.InvokeMethodBindingFlags.GetPropertyBindingFlags.SetPropertyBindingFlags.PutDispPropertyBindingFlags.PutRefDispProperty のいずれかが渡されませんでした。

または 名前付きパラメーター配列の 1 つに、 nullである文字列が含まれています。

指定されたメンバーは、クラス初期化子です。

フィールドまたはプロパティが見つかりません。

args 内の引数と一致するメソッドが見つかりません。

または 現在の Type オブジェクトは、オープン型のパラメーターを含む型を表します。つまり、ContainsGenericParameterstrue を返します。

指定されたメンバーを target で呼び出すことができません。

複数のメソッドがバインディングの基準と一致します。

name によって表されるメソッドに、1 つ以上の未指定のジェネリック型パラメーターがあります。 つまり、このメソッドの ContainsGenericParameters プロパティが true を返します。

注釈

既定のバインダー (パラメーター) は処理されませんが、抽象クラスを使用して、 を処理するカスタム CultureInfo culture System.Reflection.Binder バインダーを記述できます culture

注意

を使用して InvokeMember ジェネリック メソッドを呼び出すすることはできません。

検索に BindingFlags 含めるメンバーを定義するには、次のフィルター フラグを使用できます。

  • 検索 BindingFlags.Public にパブリック メンバーを含めるには、 を指定します。

  • 非パブリック メンバー (つまり、プライベート、内部、および保護されたメンバー) を検索に含 BindingFlags.NonPublic める場合に指定します。

  • 階層 BindingFlags.FlattenHierarchy の上に静的メンバーを含める場合に指定します。

検索のしくみ BindingFlags を変更するには、次の修飾子フラグを使用できます。

  • BindingFlags.IgnoreCase の大文字と小文字を無視する場合 name は 。

  • BindingFlags.DeclaredOnly 単純に継承されたメンバーではなく、 で宣言されたメンバー Type のみを検索する場合は 。

次の BindingFlags 呼び出しフラグを使用して、メンバーに対して実行するアクションを示します。

  • CreateInstance コンストラクターを呼び出す場合は 。 name は無視されます。 他の呼び出しフラグでは無効です。

  • InvokeMethod メソッドを呼び出す場合は 。コンストラクターや型初期化子は呼び出しません。 または では無効 SetField です SetProperty 。 が InvokeMethod それ自体で指定されている場合 BindingFlags.Public BindingFlags.Instance 、、、および BindingFlags.Static は自動的に含まれます。

  • GetField フィールドの値を取得する場合は 。 では無効です SetField

  • SetField フィールドの値を設定する場合は 。 では無効です GetField

  • GetProperty プロパティを取得する場合は 。 では無効です SetProperty

  • SetProperty プロパティを設定する場合は 。 では無効です GetProperty

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

次の両方の条件に当てはまる場合、メソッドが呼び出されます。

  • メソッド宣言内のパラメーターの数は、配列内の引数の数と等しくなります (既定の引数がメンバーに対して定義され args 、指定されていない BindingFlags.OptionalParamBinding 限り)。

  • 各引数の型は、バインダーによって パラメーターの型に変換できます。

バインダーは、一致するすべてのメソッドを検索します。 これらのメソッドは、要求されたバインディングの種類 (値 BindingFlags InvokeMethod GetProperty 、、など) に基づいて検出されます。 メソッドのセットは、名前、引数の数、およびバインダーで定義された一連の検索修飾子によってフィルター処理されます。

メソッドが選択されると、呼び出されます。 その時点でアクセシビリティがチェックされます。 検索では、 メソッドに関連付けられているアクセシビリティ属性に基づいて、検索されるメソッドのセットを制御できます。 クラス Binder.BindToMethod の メソッド Binder は、呼び出されるメソッドを選択する必要があります。 既定のバインダーは、最も具体的な一致を選択します。

完全に信頼されたコードでは、アクセス制限は無視されます。つまり、コードが完全に信頼されるたびに、プライベート コンストラクター、メソッド、フィールド、およびプロパティにアクセスし、リフレクションを介して呼び出すことができます。

を使用して Type.InvokeMember 、 を指定してフィールドを特定の値に設定できます BindingFlags.SetField 。 たとえば、クラス C に F という名前のパブリック インスタンス フィールドを設定し、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" に変更されます。

メンバーを呼び出す場合は、文字列形式 "[DispID=##]" を使用して、メンバー名の代わりに IDispatch DispID を指定できます。 たとえば、MyComMethod の DispID が 3 の場合は、"MyComMethod" ではなく文字列 "[DispID=3]" を指定できます。 DispID でメンバーを呼び出す方が、メンバーを名前で検索するよりも高速です。 複雑な集計シナリオでは、DispID が目的のメンバーを呼び出す唯一の方法である場合があります。

注意

.NET Framework 2.0 Service Pack 1 より、呼び出し元に フラグが付与されている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合は、このメソッドを使用して非パブリック メンバーにアクセスできます。 ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess (「 リフレクションのセキュリティに関する考慮事項」を参照してください)。

この機能を使用するには、アプリケーションが 3.5 以降.NET Frameworkターゲットとする必要があります。

こちらもご覧ください

適用対象

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

指定したバインディング制約を使用し、指定した引数リストと照合して、指定したメンバーを呼び出します。

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args);
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);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args);
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
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
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object()) As Object

パラメーター

name
String

呼び出すコンストラクター、メソッド、プロパティ、またはフィールド メンバーの名前を格納している文字列。

または 既定メンバーを呼び出すための空の文字列 ("")。

または IDispatch メンバーの場合は、"[DispID=3]" のように DispID を表す文字列。

invokeAttr
BindingFlags

検索を実施する方法を指定する列挙値のビットごとの組み合わせ。 アクセスは、BindingFlagsPublicNonPublicPrivateInvokeMethod など、GetField のうちの 1 つになります。 検索の種類を指定する必要はありません。 検索の種類が省略されている場合は、BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static を使用します。

binder
Binder

一連のプロパティを定義し、バインディングを有効にするオブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバーの呼び出しなどが含まれます。

または Nothing を使用する場合は、null 参照 (Visual Basic の場合は DefaultBinder)。 可変個の引数を指定してメソッド オーバーロードを正常に呼び出すには、Binder オブジェクトを明示的に定義することが必要な場合があるのでご注意ください。

target
Object

指定したメンバーを呼び出す対象となるオブジェクト。

args
Object[]

呼び出すメンバーに渡される引数を格納する配列。

戻り値

Object

呼び出されるメンバーの戻り値を表すオブジェクト。

実装

例外

invokeAttrCreateInstance が含まれず、namenull です。

invokeAttr が有効な BindingFlags 属性ではありません。

または invokeAttr にバインド フラグ InvokeMethodCreateInstanceGetFieldSetFieldGetPropertySetPropertyのいずれかが含まれていません。

または invokeAttr に、 CreateInstanceInvokeMethodGetFieldSetFieldGetPropertySetPropertyとの組み合わせが含まれています。

または invokeAttrGetFieldSetFieldの両方が含まれています。

または invokeAttrGetPropertySetPropertyの両方が含まれています。

または invokeAttr に、 InvokeMethodSetField または SetPropertyとの組み合わせが含まれています。

または invokeAttrSetField が含まれており、 args に複数の要素があります。

または COM オブジェクトでこのメソッドが呼び出され、バインド フラグ BindingFlags.InvokeMethodBindingFlags.GetPropertyBindingFlags.SetPropertyBindingFlags.PutDispPropertyBindingFlags.PutRefDispProperty のいずれかが渡されませんでした。

または 名前付きパラメーター配列の 1 つに、 nullである文字列が含まれています。

指定されたメンバーは、クラス初期化子です。

フィールドまたはプロパティが見つかりません。

args 内の引数と一致するメソッドが見つかりません。

または 現在の Type オブジェクトは、オープン型のパラメーターを含む型を表します。つまり、ContainsGenericParameterstrue を返します。

指定されたメンバーを target で呼び出すことができません。

複数のメソッドがバインディングの基準と一致します。

現在、.NET Compact Framework は、このメソッドをサポートしていません。

name によって表されるメソッドに、1 つ以上の未指定のジェネリック型パラメーターがあります。 つまり、このメソッドの ContainsGenericParameters プロパティが true を返します。

次の例では、 を InvokeMember 使用して 型のメンバーにアクセスします。

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

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

注釈

注意

を使用して InvokeMember ジェネリック メソッドを呼び出すすることはできません。

検索に BindingFlags 含めるメンバーを定義するには、次のフィルター フラグを使用できます。

  • 検索 BindingFlags.Public にパブリック メンバーを含めるには、 を指定します。

  • 非パブリック メンバー (つまり、プライベート メンバーと保護されたメンバー) を検索に含 BindingFlags.NonPublic める場合に指定します。

  • 階層 BindingFlags.FlattenHierarchy の上に静的メンバーを含める場合に指定します。

検索のしくみ BindingFlags を変更するには、次の修飾子フラグを使用できます。

  • BindingFlags.IgnoreCase の大文字と小文字を無視する場合 name は 。

  • BindingFlags.DeclaredOnly 単純に継承されたメンバーではなく、 で宣言されたメンバー Type のみを検索する場合は 。

次の BindingFlags 呼び出しフラグを使用して、メンバーに対して実行するアクションを示します。

  • CreateInstance コンストラクターを呼び出す場合は 。 name は無視されます。 他の呼び出しフラグでは無効です。

  • InvokeMethod メソッドを呼び出す場合は 。コンストラクターや型初期化子は呼び出しません。 または では無効 SetField です SetProperty 。 が InvokeMethod それ自体で指定されている場合 BindingFlags.Public BindingFlags.Instance 、、、および BindingFlags.Static は自動的に含まれます。

  • GetField フィールドの値を取得する場合は 。 では無効です SetField

  • SetField フィールドの値を設定する場合は 。 では無効です GetField

  • GetProperty プロパティを取得する場合は 。 では無効です SetProperty

  • SetProperty プロパティを設定する場合は 。 では無効です GetProperty

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

次の両方の条件に当てはまる場合、メソッドが呼び出されます。

  • メソッド宣言内のパラメーターの数は、配列内の引数の数と等しくなります (既定の引数がメンバーに対して定義され args 、指定されていない BindingFlags.OptionalParamBinding 限り)。

  • 各引数の型は、バインダーによって パラメーターの型に変換できます。

バインダーは、一致するすべてのメソッドを検索します。 これらのメソッドは、要求されたバインディングの種類 (値 BindingFlags InvokeMethod GetProperty 、、など) に基づいて検出されます。 メソッドのセットは、名前、引数の数、およびバインダーで定義された一連の検索修飾子によってフィルター処理されます。

メソッドが選択されると、呼び出されます。 その時点でアクセシビリティがチェックされます。 検索では、 メソッドに関連付けられているアクセシビリティ属性に基づいて、検索されるメソッドのセットを制御できます。 クラス Binder.BindToMethod の メソッド Binder は、呼び出されるメソッドを選択する必要があります。 既定のバインダーは、最も具体的な一致を選択します。

完全に信頼されたコードでは、アクセス制限は無視されます。つまり、プライベート コンストラクター、メソッド、フィールド、およびプロパティは、コードが完全に信頼されている場合は常に を通じて System.Reflection アクセスおよび呼び出すことができます。

を使用して Type.InvokeMember 、 を指定してフィールドを特定の値に設定できます BindingFlags.SetField 。 たとえば、クラス C に F という名前のパブリック インスタンス フィールドを設定し、F を に設定する場合は、 String 次のようなコードを使用できます。

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

F が の場合 String[] は、次のようなコードを使用できます。

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

フィールド F をこの新しい配列に初期化します。 を使用して、次のようなコードを使用して値のインデックスを指定し、次の値を指定して配列内の Type.InvokeMember 位置を設定できます。

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

これにより、F が保持する配列内の文字列 "z" が文字列 "b" に変更されます。

メンバーを呼び出す場合は、文字列形式 "[DispID=##]" を使用して、メンバー名の代わりに IDispatch DispID を指定できます。 たとえば、MyComMethod の DispID が 3 の場合は、"MyComMethod" ではなく文字列 "[DispID=3]" を指定できます。 DispID でメンバーを呼び出す方が、メンバーを名前で検索するよりも高速です。 複雑な集計シナリオでは、DispID が目的のメンバーを呼び出す唯一の方法である場合があります。

注意

.NET Framework 2.0 Service Pack 1 より、呼び出し元に フラグが付与されている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合は、このメソッドを使用して非パブリック メンバーにアクセスできます。 ReflectionPermission ReflectionPermissionFlag.RestrictedMemberAccess (「 リフレクションのセキュリティに関する考慮事項」を参照してください)。

この機能を使用するには、アプリケーションが 3.5 以降.NET Frameworkターゲットとする必要があります。

こちらもご覧ください

適用対象