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" }を指定すると、配列が指定namedParametersされている場合に入力配列{ "b", "a" }args変更せずに渡すことができます。

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

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

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

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

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

  • BindingFlags.IgnoreCase の大文字と小文字 nameを無視します。

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

BindingFlags の呼び出しフラグを使用して、メンバーで実行するアクションを示すことができます。

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

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

  • GetField を使用してフィールドの値を取得します。 で無効です SetField

  • SetField フィールドの値を設定します。 で無効です GetField

  • GetProperty プロパティを取得します。 で無効です SetProperty

  • SetProperty プロパティを設定します。 で無効です GetProperty

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

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

  • メソッド宣言内のパラメーターの数は、配列内 args の引数の数と同じです (既定の引数がメンバーで定義され BindingFlags.OptionalParamBinding 、指定されている場合を除く)。

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

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

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

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

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

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

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

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

F が a の 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 以降では、このメソッドを使用して、呼び出し元にフラグが付与ReflectionPermissionReflectionPermissionFlag.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 SetProperty それ自体で指定されている場合 InvokeMethod は 、 BindingFlags.PublicBindingFlags.Instance、が BindingFlags.Static 自動的に含まれます。

  • GetField を使用してフィールドの値を取得します。 で無効です SetField

  • SetField フィールドの値を設定します。 で無効です GetField

  • GetProperty プロパティを取得します。 で無効です SetProperty

  • SetProperty プロパティを設定します。 で無効です GetProperty

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

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

  • メソッド宣言内のパラメーターの数は、配列内 args の引数の数と同じです (既定の引数がメンバーで定義され BindingFlags.OptionalParamBinding 、指定されている場合を除く)。

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

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

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

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

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

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

F が a の 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 以降では、このメソッドを使用して、呼び出し元にフラグが付与ReflectionPermissionReflectionPermissionFlag.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);
    }
}
open System
open System.Reflection

// This sample class has a field, constructor, method, and property.
type MyType() =
    let mutable myField = 0

    member _.MyType(x: int byref) =
        x <- x * 5
    
    override _.ToString() =
        string myField
    
    member _.MyProp
        with get () = myField
        and set value =
            if value < 1 then
                raise (ArgumentOutOfRangeException("value", value, "value must be > 0"))
            myField <- value

let t = typeof<MyType>
// Create an instance of a type.
let args = Array.zeroCreate<obj> 8
printfn $"The value of x before the constructor is called is {args[0]}."
let obj = t.InvokeMember(null,
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.CreateInstance, null, null, args)
printfn $"Type: {obj.GetType()}"
printfn $"The value of x after the constructor returns is {args[0]}."

// Read and write to a field.
t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetField, null, obj, Array.zeroCreate<obj> 5) |> ignore
let v = t.InvokeMember("myField",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetField, null, obj, null) :?> int
printfn $"myField: {v}"

// Call a method.
let s = t.InvokeMember("ToString",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.InvokeMethod, null, obj, null) :?> string
printfn $"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, Array.zeroCreate<obj> 0) |> ignore
with :? TargetInvocationException as e ->
    // If the property assignment failed for some unexpected
    // reason, rethrow the TargetInvocationException.
    if e.InnerException.GetType() <> typeof<ArgumentOutOfRangeException> then
        reraise ()
    printfn "An invalid value was assigned to MyProp."
t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.SetProperty, null, obj, Array.zeroCreate<obj> 2) |> ignore
let v2 = t.InvokeMember("MyProp",
    BindingFlags.DeclaredOnly |||
    BindingFlags.Public ||| BindingFlags.NonPublic |||
    BindingFlags.Instance ||| BindingFlags.GetProperty, null, obj, null)
printfn $"MyProp: {v2}"
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.PublicBindingFlags.Instance、が BindingFlags.Static 自動的に含まれます。

  • GetField を使用してフィールドの値を取得します。 で無効です SetField

  • SetField フィールドの値を設定します。 で無効です GetField

  • GetProperty プロパティを取得します。 で無効です SetProperty

  • SetProperty プロパティを設定します。 で無効です GetProperty

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

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

  • メソッド宣言内のパラメーターの数は、配列内 args の引数の数と同じです (既定の引数がメンバーで定義され BindingFlags.OptionalParamBinding 、指定されている場合を除く)。

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

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

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

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

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

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

F が a の 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" に変更されます。

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

注意

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

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

こちらもご覧ください

適用対象