Type.InvokeMember メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
現在の 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[])
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
派生クラスでオーバーライドされた場合、指定したバインディング制約を使用して、指定したメンバーを呼び出し、指定した引数リスト、修飾子、およびカルチャに一致させます。
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
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);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
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 を表す文字列 (例: "[DispID=3]")。
- invokeAttr
- BindingFlags
検索の実行方法を指定する列挙値のビットごとの組み合わせ。 アクセスには、Public、NonPublic、Private、InvokeMethod、GetFieldなどのBindingFlagsのいずれかを指定できます。 検索の種類を指定する必要はありません。 参照の種類を省略すると、 BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static が使用されます。
- binder
- Binder
一連のプロパティを定義し、バインディングを有効にするオブジェクト。これには、オーバーロードされたメソッドの選択、引数型の強制型の強制、リフレクションによるメンバーの呼び出しが含まれる場合があります。
-又は-
DefaultBinder を使用する null 参照 (Visual Basicでは Nothing)。 変数引数を使用してメソッド オーバーロードを正常に呼び出す場合は、 Binder オブジェクトを明示的に定義する必要があります。
- target
- Object
指定したメンバーを呼び出すオブジェクト。
- args
- Object[]
呼び出すメンバーに渡す引数を含む配列。
- modifiers
- ParameterModifier[]
ParameterModifier配列内の対応する要素に関連付けられた属性を表すargs オブジェクトの配列。 パラメーターに関連付けられている属性は、メンバーのシグネチャに格納されます。
既定のバインダーは、COM コンポーネントを呼び出すときにのみこのパラメーターを処理します。
- culture
- CultureInfo
使用するグローバリゼーション ロケールを表す CultureInfo オブジェクト。これは、数値の文字列を Double に変換するなど、ロケール固有の変換に必要な場合があります。
-又は-
現在のスレッドの CultureInfo を使用するための null 参照 (Visual Basic の Nothing)。
- namedParameters
- String[]
args配列内の値が渡されるパラメーターの名前を含む配列。
返品
呼び出されたメンバーの戻り値を表すオブジェクト。
実装
- 属性
例外
invokeAttr には CreateInstance が含まれていないので、 name は null。
args と modifiers の長さが同じではありません。
-又は-
invokeAttr は有効な BindingFlags 属性ではありません。
-又は-
invokeAttr には、 InvokeMethod、 CreateInstance、 GetField、 SetField、 GetProperty、または SetPropertyのいずれかのバインド フラグが含まれていません。
-又は-
invokeAttrには、InvokeMethod、GetField、SetField、GetProperty、またはSetPropertyと組み合わせたCreateInstanceが含まれています。
-又は-
invokeAttr には、 GetField と SetFieldの両方が含まれています。
-又は-
invokeAttr には、 GetProperty と SetPropertyの両方が含まれています。
-又は-
invokeAttrには、SetFieldまたはSetPropertyと組み合わせたInvokeMethodが含まれています。
-又は-
invokeAttr には SetField が含まれており、 args には複数の要素があります。
-又は-
名前付きパラメーター配列が引数配列よりも大きい。
-又は-
このメソッドは COM オブジェクトで呼び出され、 BindingFlags.InvokeMethod、 BindingFlags.GetProperty、 BindingFlags.SetProperty、 BindingFlags.PutDispProperty、または BindingFlags.PutRefDispPropertyのいずれかのバインド フラグが渡されませんでした。
-又は-
名前付きパラメーター配列の 1 つに、 nullされる文字列が含まれています。
指定されたメンバーはクラス初期化子です。
フィールドまたはプロパティが見つかりません。
argsの引数に一致するメソッドが見つかりません。
-又は-
namedParametersで指定された引数名を持つメンバーが見つかりません。
-又は-
現在の Type オブジェクトは、開いている型パラメーターを含む型を表します。つまり、 ContainsGenericParameters は trueを返します。
指定したメンバーを 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) (Visual Basic のM(ByVal a As String, ByVal b As Integer)) と入力配列 { 42, "x" } を指定すると、配列 { "b", "a" } が namedParameters に指定されている場合、入力配列を変更せずに args に渡すことができます。
次の 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 クラスのBinder.BindToMethod メソッドは、呼び出すメソッドを選択します。 既定のバインダーは、最も具体的な一致を選択します。
InvokeMember は、既定値を持つパラメーターを使用してメソッドを呼び出すために使用できます。 これらのメソッドにバインドするには、Reflection BindingFlags.OptionalParamBinding を指定する必要があります。 既定値を持つパラメーターの場合は、別の値を指定するか、既定値を使用する Missing.Value を指定できます。
たとえば、MyMethod(int x, float y = 2.0) などのメソッドを考えてみましょう。 MyMethod(4) として最初の引数のみを指定してこのメソッドを呼び出すには、上記のバインディング フラグのいずれかを渡し、2 つの引数 (つまり、最初の引数に 4、2 番目の引数に 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" に変更されます。
注
このメソッドを使用すると、呼び出し元が ReflectionPermission フラグを持つReflectionPermissionFlag.RestrictedMemberAccessを許可されている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはそのサブセットに制限されている場合に、非パブリック メンバーにアクセスできます。 ( リフレクションのセキュリティに関する考慮事項を参照してください)。
この機能を使用するには、アプリケーションで .NET Framework 3.5 以降をターゲットにする必要があります。
こちらもご覧ください
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
適用対象
InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
指定したバインディング制約を使用し、指定した引数リストとカルチャに一致して、指定したメンバーを呼び出します。
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Globalization.CultureInfo? culture);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Globalization.CultureInfo -> obj
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 を表す文字列 (例: "[DispID=3]")。
- invokeAttr
- BindingFlags
検索の実行方法を指定する列挙値のビットごとの組み合わせ。 アクセスには、Public、NonPublic、Private、InvokeMethod、GetFieldなどのBindingFlagsのいずれかを指定できます。 検索の種類を指定する必要はありません。 参照の種類を省略すると、 BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static が使用されます。
- binder
- Binder
一連のプロパティを定義し、バインディングを有効にするオブジェクト。これには、オーバーロードされたメソッドの選択、引数型の強制型の強制、リフレクションによるメンバーの呼び出しが含まれる場合があります。
-又は-
DefaultBinder を使用するための null 参照 (Visual Basic の Nothing)。 変数引数を使用してメソッド オーバーロードを正常に呼び出す場合は、 Binder オブジェクトを明示的に定義する必要があります。
- target
- Object
指定したメンバーを呼び出すオブジェクト。
- args
- Object[]
呼び出すメンバーに渡す引数を含む配列。
- culture
- CultureInfo
使用するグローバリゼーション ロケールを表すオブジェクト。これは、数値 String を Doubleに変換するなど、ロケール固有の変換に必要な場合があります。
-又は-
現在のスレッドの CultureInfo を使用するための null 参照 (Visual Basic の Nothing)。
返品
呼び出されたメンバーの戻り値を表すオブジェクト。
実装
- 属性
例外
invokeAttr には CreateInstance が含まれていないので、 name は null。
invokeAttr は有効な BindingFlags 属性ではありません。
-又は-
invokeAttr には、 InvokeMethod、 CreateInstance、 GetField、 SetField、 GetProperty、または SetPropertyのいずれかのバインド フラグが含まれていません。
-又は-
invokeAttrには、InvokeMethod、GetField、SetField、GetProperty、またはSetPropertyと組み合わせたCreateInstanceが含まれています。
-又は-
invokeAttr には、 GetField と SetFieldの両方が含まれています。
-又は-
invokeAttr には、 GetProperty と SetPropertyの両方が含まれています。
-又は-
invokeAttrには、SetFieldまたはSetPropertyと組み合わせたInvokeMethodが含まれています。
-又は-
invokeAttr には SetField が含まれており、 args には複数の要素があります。
-又は-
このメソッドは COM オブジェクトで呼び出され、 BindingFlags.InvokeMethod、 BindingFlags.GetProperty、 BindingFlags.SetProperty、 BindingFlags.PutDispProperty、または BindingFlags.PutRefDispPropertyのいずれかのバインド フラグが渡されませんでした。
-又は-
名前付きパラメーター配列の 1 つに、 nullされる文字列が含まれています。
指定されたメンバーはクラス初期化子です。
フィールドまたはプロパティが見つかりません。
argsの引数に一致するメソッドが見つかりません。
-又は-
現在の Type オブジェクトは、開いている型パラメーターを含む型を表します。つまり、 ContainsGenericParameters は trueを返します。
指定したメンバーを 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 クラスのBinder.BindToMethod メソッドは、呼び出すメソッドを選択します。 既定のバインダーは、最も具体的な一致を選択します。
完全に信頼されたコードでは、アクセス制限は無視されます。つまり、プライベート コンストラクター、メソッド、フィールド、およびプロパティは、コードが完全に信頼されるたびに Reflection を介してアクセスして呼び出すことができます。
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 が目的のメンバーを呼び出す唯一の方法である場合があります。
注
このメソッドを使用すると、呼び出し元が ReflectionPermission フラグを持つReflectionPermissionFlag.RestrictedMemberAccessを許可されている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはそのサブセットに制限されている場合に、非パブリック メンバーにアクセスできます。 ( リフレクションのセキュリティに関する考慮事項を参照してください)。
この機能を使用するには、アプリケーションで .NET Framework 3.5 以降をターゲットにする必要があります。
こちらもご覧ください
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission
適用対象
InvokeMember(String, BindingFlags, Binder, Object, Object[])
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
- ソース:
- Type.cs
指定したバインディング制約を使用して、指定したメンバーを呼び出し、指定した引数リストと一致します。
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);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)]
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)]
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);
public object? InvokeMember(string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.NonPublicProperties | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicFields | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicMethods | System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicProperties)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)>]
member this.InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] -> obj
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 を表す文字列 (例: "[DispID=3]")。
- invokeAttr
- BindingFlags
検索の実行方法を指定する列挙値のビットごとの組み合わせ。 アクセスには、Public、NonPublic、Private、InvokeMethod、GetFieldなどのBindingFlagsのいずれかを指定できます。 検索の種類を指定する必要はありません。 参照の種類を省略すると、 BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static が使用されます。
- binder
- Binder
一連のプロパティを定義し、バインディングを有効にするオブジェクト。これには、オーバーロードされたメソッドの選択、引数型の強制型の強制、リフレクションによるメンバーの呼び出しが含まれる場合があります。
-又は-
DefaultBinder を使用するための null 参照 (Visual Basic の Nothing)。 変数引数を使用してメソッド オーバーロードを正常に呼び出す場合は、 Binder オブジェクトを明示的に定義する必要があります。
- target
- Object
指定したメンバーを呼び出すオブジェクト。
- args
- Object[]
呼び出すメンバーに渡す引数を含む配列。
返品
呼び出されたメンバーの戻り値を表すオブジェクト。
実装
- 属性
例外
invokeAttr には CreateInstance が含まれていないので、 name は null。
invokeAttr は有効な BindingFlags 属性ではありません。
-又は-
invokeAttr には、 InvokeMethod、 CreateInstance、 GetField、 SetField、 GetProperty、または SetPropertyのいずれかのバインド フラグが含まれていません。
-又は-
invokeAttrには、InvokeMethod、GetField、SetField、GetProperty、またはSetPropertyと組み合わせたCreateInstanceが含まれています。
-又は-
invokeAttr には、 GetField と SetFieldの両方が含まれています。
-又は-
invokeAttr には、 GetProperty と SetPropertyの両方が含まれています。
-又は-
invokeAttrには、SetFieldまたはSetPropertyと組み合わせたInvokeMethodが含まれています。
-又は-
invokeAttr には SetField が含まれており、 args には複数の要素があります。
-又は-
このメソッドは COM オブジェクトで呼び出され、 BindingFlags.InvokeMethod、 BindingFlags.GetProperty、 BindingFlags.SetProperty、 BindingFlags.PutDispProperty、または BindingFlags.PutRefDispPropertyのいずれかのバインド フラグが渡されませんでした。
-又は-
名前付きパラメーター配列の 1 つに、 nullされる文字列が含まれています。
指定されたメンバーはクラス初期化子です。
フィールドまたはプロパティが見つかりません。
argsの引数に一致するメソッドが見つかりません。
-又は-
現在の Type オブジェクトは、開いている型パラメーターを含む型を表します。つまり、 ContainsGenericParameters は trueを返します。
指定したメンバーを targetで呼び出すことはできません。
複数のメソッドがバインド条件に一致します。
.NET Compact Framework では現在、このメソッドはサポートされていません。
nameによって表されるメソッドには、1 つ以上の未指定のジェネリック型パラメーターがあります。 つまり、メソッドの ContainsGenericParameters プロパティは trueを返します。
例
次の例では、 InvokeMember を使用して型のメンバーにアクセスします。
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.Public、BindingFlags.Instance、およびBindingFlags.Staticが自動的に含まれます。GetFieldフィールドの値を取得します。SetFieldでは無効です。SetFieldフィールドの値を設定します。GetFieldでは無効です。GetPropertyを使用してプロパティを取得します。SetPropertyでは無効です。SetPropertyプロパティを設定します。GetPropertyでは無効です。
詳細については、System.Reflection.BindingFlags を参照してください。
次の条件の両方が当てはまる場合、メソッドが呼び出されます。
メソッド宣言のパラメーターの数は、
args配列内の引数の数と等しくなります (メンバーで既定の引数が定義され、BindingFlags.OptionalParamBindingが指定されていない場合)。各引数の型は、バインダーによってパラメーターの型に変換できます。
バインダーは、一致するすべてのメソッドを検索します。 これらのメソッドは、要求されたバインディングの種類 (BindingFlags 値 InvokeMethod、 GetPropertyなど) に基づいて見つかります。 メソッドのセットは、名前、引数の数、およびバインダーで定義されている検索修飾子のセットによってフィルター処理されます。
メソッドが選択されると、呼び出されます。 その時点でアクセシビリティがチェックされます。 検索では、メソッドに関連付けられているアクセシビリティ属性に基づいて、検索するメソッドのセットを制御できます。 Binder クラスのBinder.BindToMethod メソッドは、呼び出すメソッドを選択します。 既定のバインダーは、最も具体的な一致を選択します。
完全に信頼されたコードでは、アクセス制限は無視されます。つまり、プライベート コンストラクター、メソッド、フィールド、およびプロパティは、コードが完全に信頼されるたびに、 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" に変更されます。
IDispatch メンバーを呼び出すときは、文字列形式 "[DispID=##]" を使用して、メンバー名の代わりに DispID を指定できます。 たとえば、MyComMethod の DispID が 3 の場合は、"MyComMethod" の代わりに文字列 "[DispID=3]" を指定できます。 DispID によるメンバーの呼び出しは、メンバーを名前で調べることよりも高速です。 複雑な集計シナリオでは、DispID が目的のメンバーを呼び出す唯一の方法である場合があります。
注
このメソッドを使用すると、呼び出し元が ReflectionPermission フラグを持つReflectionPermissionFlag.RestrictedMemberAccessを許可されている場合、および非パブリック メンバーの許可セットが呼び出し元の許可セットまたはそのサブセットに制限されている場合に、非パブリック メンバーにアクセスできます。 ( リフレクションのセキュリティに関する考慮事項を参照してください)。
この機能を使用するには、アプリケーションで Framework 3.5 以降.NETターゲットにする必要があります。
こちらもご覧ください
- String
- Binder
- DefaultBinder
- BindingFlags
- ParameterModifier
- ParameterAttributes
- CultureInfo
- ReflectionPermission