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 ジェネリックメソッドを呼び出すことはできません。

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

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

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

配列は、 namedParameters 入力配列内の引数の順序を変更するために使用できます。 たとえば、メソッド M(string a, int b) ( M(ByVal a As String, ByVal b As Integer) Visual Basic) と入力配列を指定した { 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またはでは無効です SetPropertyInvokeMethodがそれ自体によって指定されている場合、、、 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 を使用すると、既定値を持つパラメーターを使用してメソッドを呼び出すことができます。 これらのメソッドにバインドするには、リフレクションを指定する必要があり BindingFlags.OptionalParamBinding ます。 既定値を持つパラメーターの場合は、別の値を指定するか、既定値を使用するように指定することができ Missing.Value ます。

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

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

を指定すると、を使用し Type.InvokeMember て、フィールドを特定の値に設定でき BindingFlags.SetField ます。 たとえば、F という名前のパブリックインスタンスフィールドをクラス C に設定し、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 非パブリックメンバーの許可セットが呼び出し元の許可セットまたはサブセットに制限されている場合に、非パブリックメンバーにアクセスできます。 (「 リフレクションのセキュリティに関する考慮事項」を参照してください)。

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

こちらもご覧ください

適用対象

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またはでは無効です SetPropertyInvokeMethodがそれ自体によって指定されている場合、、、 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" に変更されます。

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

注意

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

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

こちらもご覧ください

適用対象

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ターゲットとする必要があります。

こちらもご覧ください

適用対象