Type.InvokeMember メソッド (String, BindingFlags, Binder, Object, Object[])
アセンブリ: mscorlib (mscorlib.dll 内)

Public Function InvokeMember ( _ name As String, _ invokeAttr As BindingFlags, _ binder As Binder, _ target As Object, _ args As Object() _ ) As Object
Dim instance As Type Dim name As String Dim invokeAttr As BindingFlags Dim binder As Binder Dim target As Object Dim args As Object() Dim returnValue As Object returnValue = instance.InvokeMember(name, invokeAttr, binder, target, args)
public Object InvokeMember ( string name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args )
public: virtual Object^ InvokeMember ( String^ name, BindingFlags invokeAttr, Binder^ binder, Object^ target, array<Object^>^ args ) sealed
public final Object InvokeMember ( String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args )
public final function InvokeMember ( name : String, invokeAttr : BindingFlags, binder : Binder, target : Object, args : Object[] ) : Object
- invokeAttr
検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。アクセスは、Public、NonPublic、Private、InvokeMethod、GetField など、BindingFlags のうちの 1 つになります。検索の種類を指定する必要はありません。検索の種類を省略した場合は、BindingFlags.Public |BindingFlags.Instance が適用されます。
- binder
一連のプロパティを定義し、バインディングを有効にする Binder オブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバの呼び出しなどが含まれます。
または
DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing)。
呼び出されたメンバの戻り値を表す Object。

例外の種類 | 条件 |
---|---|
ArgumentNullException | invokeAttr に CreateInstance が格納されていて、typeName が null 参照 (Visual Basic では Nothing) です。 |
ArgumentException | args が多次元です。 または invokeAttr が有効な BindingFlags 属性ではありません。 または 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 参照 (Visual Basic では Nothing) の文字列が含まれています。 |
MethodAccessException | |
MissingFieldException | |
MissingMethodException | メソッドが見つかりません。 または 現在の Type オブジェクトは、オープン型パラメータを格納する型を表します。つまり、ContainsGenericParameters は true を返します。 |
TargetException | |
AmbiguousMatchException | |
NotSupportedException | .NET Compact Framework は、現在このプロパティをサポートしていません。 |

次の BindingFlags フィルタ フラグは、検索対象に含めるメンバを定義するために使用できます。
-
戻り値を取得するには、BindingFlags.Instance または BindingFlags.Static のいずれかを指定する必要があります。
-
検索対象にパブリックではないメンバ (つまり、プライベート メンバやプロテクト メンバ) を含めるための BindingFlags.NonPublic を指定します。
-
階層構造の上位にある静的メンバを含めるための BindingFlags.FlattenHierarchy を指定します。
次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。
次の BindingFlags 呼び出しフラグは、メンバを使用して実行するアクションを指定するために使用できます。
-
コンストラクタを呼び出すための CreateInstance。name は無視されます。他の呼び出しフラグの場合は無効です。
-
メソッドを呼び出すための InvokeMethod。ただし、コンストラクタや型初期化子は呼び出しません。SetField または SetProperty の場合は無効です。
詳細については、「System.Reflection.BindingFlags」を参照してください。
バインダは一致するすべてのメソッドを検索します。これらのメソッドは、要求されるバインディングの種類に基づいて検索されます ( BindingFlags 値 InvokeMethod、GetProperty など)。メソッド セットは、名前、引数の数、バインダで定義されている一連の検索修飾子によってフィルタ処理されます。
メソッドは、選択された後に呼び出されます。その時点で、アクセスできるかどうかが確認されます。検索では、メソッドに関連付けられているアクセシビリティ属性に基づいて、どのメソッド セットを検索するかを制御できます。Binder クラスの Binder.BindToMethod メソッドは、呼び出すメソッドを選択します。既定のバインダは最も的確に一致したものを選択します。
完全に信頼されているコードに対しては、アクセス制限は無視されます。つまり、コードが完全に信頼されている場合は、System.Reflection を使用して、プライベートなコンストラクタ、メソッド、フィールド、およびプロパティにアクセスしたり、それらを呼び出すことができます。
BindingFlags.SetField を指定することによって、Type.InvokeMember を使用してフィールドに特定の値を設定できます。たとえば、F という名前のパブリック インスタンス フィールドにクラス C を設定する場合、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 である場合は、文字列 "[DispID=3]" を "MyComMethod" の代わりに指定します。メンバを DispID で呼び出す方法は、メンバを名前で検索するよりも時間がかかりません。複雑な集約シナリオでは、目的のメンバを呼び出すために DispID しか使用できない場合があります。

InvokeMember を使用して型のメンバにアクセスする例を次に示します。
Imports System 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 'New Public Overrides Function ToString() As [String] Return myField.ToString() End Function 'ToString Public Property MyProp() As Int32 Get Return myField End Get Set(ByVal Value As Int32) If Value < 1 Then Throw New ArgumentOutOfRangeException("value", Value, "value must be > 0") End If myField = Value End Set End Property End Class 'MyType Class MyApp Shared Sub Main() Dim t As Type = GetType(MyType) ' Create an instance of a type. Dim args() As [Object] = {8} Console.WriteLine("The value of x before the constructor is called is {0}.", args(0)) Dim obj As [Object] = t.InvokeMember(Nothing, BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.CreateInstance, Nothing, Nothing, args) Console.WriteLine("Type: {0}", obj.GetType().ToString()) Console.WriteLine("The value of x after the constructor returns is {0}.", args(0)) ' Read and write to a field. t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetField, Nothing, obj, New [Object]() {5}) Dim v As Int32 = CType(t.InvokeMember("myField", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetField, Nothing, obj, Nothing), Int32) Console.WriteLine("myField: {0}", v) ' Call a method. Dim s As [String] = CType(t.InvokeMember("ToString", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod, Nothing, obj, Nothing), [String]) Console.WriteLine("ToString: {0}", s) ' Read and write a property. First, attempt to assign an ' invalid value; then assign a valid value; finally, get ' the value. Try ' Assign the value zero to MyProp. The Property Set ' throws an exception, because zero is an invalid value. ' InvokeMember catches the exception, and throws ' TargetInvocationException. To discover the real cause ' you must catch TargetInvocationException and examine ' the inner exception. t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {0}) Catch e As TargetInvocationException ' If the property assignment failed for some unexpected ' reason, rethrow the TargetInvocationException. If Not e.InnerException.GetType() Is GetType(ArgumentOutOfRangeException) Then Throw End If Console.WriteLine("An invalid value was assigned to MyProp.") End Try t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.SetProperty, Nothing, obj, New [Object]() {2}) v = CType(t.InvokeMember("MyProp", BindingFlags.DeclaredOnly Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.GetProperty, Nothing, obj, Nothing), Int32) Console.WriteLine("MyProp: {0}", v) End Sub 'Main End Class 'MyApp
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); } }
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 ); }
import System.*; import System.Reflection.*; // This sample class has a field, constructor, method, and property. class MyType { private int myField; public MyType( /**@ref */ int x) { x *= 5; } //MyType public String ToString() { return System.Convert.ToString(myField); } //ToString /** @property */ public int get_MyProp() { return myField; } //get_MyProp /** @property */ public void set_MyProp(int value) { if (value < 1) { throw new ArgumentOutOfRangeException("value", (Int32)value, "value must be > 0"); } myField = value; } //set_MyProp } //MyType class MyApp { public static void main(String[] args) throws System.Reflection.TargetInvocationException { Type t = MyType.class.ToType(); // Create an instance of a type. Object args1[] = new Object[] { (Int32)8 }; Console.WriteLine("The value of x before the constructor" + " is called is {0}.", args1[0]); Object obj = t.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, args1); Console.WriteLine("Type: " + obj.GetType().ToString()); Console.WriteLine("The value of x after the constructor " + "returns is {0}.", args1[0]); // Read and write to a field. t.InvokeMember("myField", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetField, null, obj, new Object[] { (Int32)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[] { (Int32)0 }); } catch (TargetInvocationException e) { // If the property assignment failed for some unexpected // reason, rethrow the TargetInvocationException. if (!(e.get_InnerException().GetType().Equals (ArgumentOutOfRangeException.class.ToType()))) { throw e; } 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[] { (Int32)2 }); v = (Int32)t.InvokeMember("MyProp", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty, null, obj, null); Console.WriteLine("MyProp: " + v); } //main } //MyApp


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Type.InvokeMember メソッド (String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])
アセンブリ: mscorlib (mscorlib.dll 内)

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
Dim instance As Type Dim name As String Dim invokeAttr As BindingFlags Dim binder As Binder Dim target As Object Dim args As Object() Dim modifiers As ParameterModifier() Dim culture As CultureInfo Dim namedParameters As String() Dim returnValue As Object returnValue = instance.InvokeMember(name, invokeAttr, binder, target, args, modifiers, culture, namedParameters)
public abstract Object InvokeMember ( string name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters )
public: virtual Object^ InvokeMember ( String^ name, BindingFlags invokeAttr, Binder^ binder, Object^ target, array<Object^>^ args, array<ParameterModifier>^ modifiers, CultureInfo^ culture, array<String^>^ namedParameters ) abstract
public abstract Object InvokeMember ( String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters )
public abstract function InvokeMember ( name : String, invokeAttr : BindingFlags, binder : Binder, target : Object, args : Object[], modifiers : ParameterModifier[], culture : CultureInfo, namedParameters : String[] ) : Object
- invokeAttr
検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。アクセスは、Public、NonPublic、Private、InvokeMethod、GetField など、BindingFlags のうちの 1 つになります。検索の種類を指定する必要はありません。検索の種類を省略した場合は、BindingFlags.Public |BindingFlags.Instance が適用されます。
- binder
一連のプロパティを定義し、バインディングを有効にする Binder オブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバの呼び出しなどが含まれます。
または
DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing)。
- modifiers
args 配列内の対応する要素に関連付けられている属性を表す ParameterModifier オブジェクトの配列。パラメータに関連付けられた属性は、メンバのシグネチャに格納されます。既定のバインダは、このパラメータを処理しません。
- culture
使用するロケールを表す CultureInfo オブジェクト。これは、String 型の数値を Double に変換するなど、ロケール固有の変換を実行するために必要となる場合があります。
または
現在のスレッドの CultureInfo を使用する場合は null 参照 (Visual Basic では Nothing)。
呼び出されたメンバの戻り値を表す Object。

例外の種類 | 条件 |
---|---|
ArgumentNullException | invokeAttr に CreateInstance が格納されていて、typeName が null 参照 (Visual Basic では Nothing) です。 |
ArgumentException | args が多次元です。 または modifiers が多次元です。 または または invokeAttr が有効な BindingFlags 属性ではありません。 または 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 参照 (Visual Basic では Nothing) の文字列が含まれています。 |
MethodAccessException | |
MissingFieldException | |
MissingMethodException | メソッドが見つかりません。 または 現在の Type オブジェクトは、オープン型パラメータを格納する型を表します。つまり、ContainsGenericParameters は true を返します。 |
TargetException | |
AmbiguousMatchException |

InvokeMember は、コンストラクタのメンバまたはメソッドのメンバの呼び出し、プロパティのメンバの取得または設定、データ フィールドのメンバの取得または設定、または配列のメンバの要素の取得または設定を行います。
IDispatch メンバを呼び出すときに、文字列形式 "[DispID=##]" を使用して、メンバ名の代わりに DispID を指定できます。たとえば、MyComMethod の DispID が 3 である場合は、文字列 "[DispID=3]" を "MyComMethod" の代わりに指定します。メンバを DispID で呼び出す方法は、メンバを名前で検索するよりも時間がかかりません。複雑な集約シナリオでは、目的のメンバを呼び出すために DispID しか使用できない場合があります。
既定のバインダは ParameterModifier または CultureInfo (modifiers パラメータおよび culture パラメータ) を処理しませんが、System.Reflection.Binder 抽象クラスを使用して、modifiers と culture を処理するカスタム バインダを記述できます。ParameterModifier は、COM 相互運用機能によって呼び出すときだけに使用され、参照渡しされるパラメータだけが処理されます。
args 配列と modifiers 配列の長さが同じです。args 配列で指定するパラメータには、modifiers 配列で指定されている pdIn、pdOut、pdLcid、pdRetval、pdOptional、pdHasDefault の各属性を設定できます。これらの属性は、それぞれ [In]、[Out]、[lcid]、[retval]、[optional]、およびパラメータが既定値を持つかどうかを指定する値を表します。パラメータに関連付けられた属性はメタデータに格納され、相互運用性を拡張します。
namedParameters 配列内の各パラメータは、args 配列内の対応する要素の値を取得します。args の長さが namedParameters の長さを超える場合は、残った引数の値が順に渡されます。
次の BindingFlags フィルタ フラグは、検索対象に含めるメンバを定義するために使用できます。
-
戻り値を取得するには、BindingFlags.Instance または BindingFlags.Static のいずれかを指定する必要があります。
-
検索対象にパブリックではないメンバ (つまり、プライベート メンバやプロテクト メンバ) を含めるための BindingFlags.NonPublic を指定します。
-
階層構造の上位にある静的メンバを含めるための BindingFlags.FlattenHierarchy を指定します。
次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。
次の BindingFlags 呼び出しフラグは、メンバを使用して実行するアクションを指定するために使用できます。
-
コンストラクタを呼び出すための CreateInstance。name は無視されます。他の呼び出しフラグの場合は無効です。
-
メソッドを呼び出すための InvokeMethod。ただし、コンストラクタや型初期化子は呼び出しません。SetField または SetProperty の場合は無効です。
詳細については、「System.Reflection.BindingFlags」を参照してください。
バインダは一致するすべてのメソッドを検索します。これらのメソッドは、要求されるバインディングの種類に基づいて検索されます ( BindingFlags 値 InvokeMethod、GetProperty など)。メソッド セットは、名前、引数の数、バインダで定義されている一連の検索修飾子によってフィルタ処理されます。
メソッドは、選択された後に呼び出されます。その時点で、アクセスできるかどうかが確認されます。検索では、メソッドに関連付けられているアクセシビリティ属性に基づいて、どのメソッド セットを検索するかを制御できます。Binder クラスの Binder.BindToMethod メソッドは、呼び出すメソッドを選択します。既定のバインダは最も的確に一致したものを選択します。
パラメータの既定値が設定されたメソッドを呼び出すには、InvokeMember を使用します。これらのメソッドをバインドするには、リフレクションでは BindingFlags.OptionalParamBinding を指定することが必要です。既定値を持つパラメータに対しては、別の値を指定するか、または Missing.Value を提供して既定値を使用できます。
たとえば、MyMethod(int x, float y = 2.0) というメソッドがあるとします。このメソッドを MyMethod(4) のように最初の引数だけを指定して呼び出すには、上記のバインディング フラグのうち 1 つを渡し、最初の引数には 4、第 2 の引数には Missing.Value という 2 つの引数を渡します。Invoke メソッドでは、Missing.Value を使用する場合を除いて、省略可能なパラメータを省略することはできません。オプションのパラメータを省略する必要のある場合は、代わりに InvokeMember を使用してください。
完全に信頼されているコードに対しては、アクセス制限は無視されます。つまり、コードが完全に信頼されている場合は、System.Reflection を使用して、プライベートなコンストラクタ、メソッド、フィールド、およびプロパティにアクセスしたり、それらを呼び出すことができます。
BindingFlags.SetField を指定することによって、Type.InvokeMember を使用してフィールドに特定の値を設定できます。たとえば、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);


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Type.InvokeMember メソッド (String, BindingFlags, Binder, Object, Object[], CultureInfo)
アセンブリ: mscorlib (mscorlib.dll 内)

Public Function InvokeMember ( _ name As String, _ invokeAttr As BindingFlags, _ binder As Binder, _ target As Object, _ args As Object(), _ culture As CultureInfo _ ) As Object
Dim instance As Type Dim name As String Dim invokeAttr As BindingFlags Dim binder As Binder Dim target As Object Dim args As Object() Dim culture As CultureInfo Dim returnValue As Object returnValue = instance.InvokeMember(name, invokeAttr, binder, target, args, culture)
public Object InvokeMember ( string name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, CultureInfo culture )
public: virtual Object^ InvokeMember ( String^ name, BindingFlags invokeAttr, Binder^ binder, Object^ target, array<Object^>^ args, CultureInfo^ culture ) sealed
public final Object InvokeMember ( String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, CultureInfo culture )
public final function InvokeMember ( name : String, invokeAttr : BindingFlags, binder : Binder, target : Object, args : Object[], culture : CultureInfo ) : Object
- invokeAttr
検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。アクセスは、Public、NonPublic、Private、InvokeMethod、GetField など、BindingFlags のうちの 1 つになります。検索の種類を指定する必要はありません。検索の種類を省略した場合は、BindingFlags.Public |BindingFlags.Instance が適用されます。
- binder
一連のプロパティを定義し、バインディングを有効にする Binder オブジェクト。バインディングには、オーバーロードされたメソッドの選択、引数の型の強制変換、リフレクションによるメンバの呼び出しなどが含まれます。
または
DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing)。
- culture
使用するロケールを表す CultureInfo オブジェクト。これは、String 型の数値を Double に変換するなど、ロケール固有の変換を実行するために必要となる場合があります。
または
現在のスレッドの CultureInfo を使用する場合は null 参照 (Visual Basic では Nothing)。
呼び出されたメンバの戻り値を表す Object。

例外の種類 | 条件 |
---|---|
ArgumentNullException | invokeAttr に CreateInstance が格納されていて、typeName が null 参照 (Visual Basic では Nothing) です。 |
ArgumentException | args が多次元です。 または invokeAttr が有効な BindingFlags 属性ではありません。 または 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 参照 (Visual Basic では Nothing) の文字列が含まれています。 |
MethodAccessException | |
MissingFieldException | |
MissingMethodException | メソッドが見つかりません。 または 現在の Type オブジェクトは、オープン型パラメータを格納する型を表します。つまり、ContainsGenericParameters は true を返します。 |
TargetException | |
AmbiguousMatchException |

既定のバインダは CultureInfo (culture パラメータ) を処理しませんが、System.Reflection.Binder 抽象クラスを使用して culture を処理するカスタム バインダを記述できます。
次の BindingFlags フィルタ フラグは、検索対象に含めるメンバを定義するために使用できます。
-
戻り値を取得するには、BindingFlags.Instance または BindingFlags.Static のいずれかを指定する必要があります。
-
検索対象にパブリックではないメンバ (つまり、プライベート メンバやプロテクト メンバ) を含めるための BindingFlags.NonPublic を指定します。
-
階層構造の上位にある静的メンバを含めるための BindingFlags.FlattenHierarchy を指定します。
次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。
次の BindingFlags 呼び出しフラグは、メンバを使用して実行するアクションを指定するために使用できます。
-
コンストラクタを呼び出すための CreateInstance。name は無視されます。他の呼び出しフラグの場合は無効です。
-
メソッドを呼び出すための InvokeMethod。ただし、コンストラクタや型初期化子は呼び出しません。SetField または SetProperty の場合は無効です。
詳細については、「System.Reflection.BindingFlags」を参照してください。
バインダは一致するすべてのメソッドを検索します。これらのメソッドは、要求されるバインディングの種類に基づいて検索されます ( BindingFlags 値 InvokeMethod、GetProperty など)。メソッド セットは、名前、引数の数、バインダで定義されている一連の検索修飾子によってフィルタ処理されます。
メソッドは、選択された後に呼び出されます。その時点で、アクセスできるかどうかが確認されます。検索では、メソッドに関連付けられているアクセシビリティ属性に基づいて、どのメソッド セットを検索するかを制御できます。Binder クラスの Binder.BindToMethod メソッドは、呼び出すメソッドを選択します。既定のバインダは最も的確に一致したものを選択します。
完全に信頼されているコードに対しては、アクセス制限は無視されます。つまり、コードが完全に信頼されている場合は、プライベートなコンストラクタ、メソッド、フィールド、およびプロパティにアクセスしたり、それらを呼び出すことができます。
BindingFlags.SetField を指定することによって、Type.InvokeMember を使用してフィールドに特定の値を設定できます。たとえば、F という名前のパブリック インスタンス フィールドにクラス C を設定する場合、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 である場合は、文字列 "[DispID=3]" を "MyComMethod" の代わりに指定します。メンバを DispID で呼び出す方法は、メンバを名前で検索するよりも時間がかかりません。複雑な集約シナリオでは、目的のメンバを呼び出すために DispID しか使用できない場合があります。


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Type.InvokeMember メソッド

名前 | 説明 |
---|---|
Type.InvokeMember (String, BindingFlags, Binder, Object, Object[]) | 指定したバインディング制約を使用し、指定した引数リストと照合して、指定したメンバを呼び出します。 .NET Compact Framework によってサポートされています。 |
Type.InvokeMember (String, BindingFlags, Binder, Object, Object[], CultureInfo) | 指定したバインディング制約を使用し、指定したメンバのうち、指定した引数リストおよびカルチャと一致するメンバを呼び出します。 |
Type.InvokeMember (String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) | 派生クラスによってオーバーライドされた場合、指定したバインディング制約を使用し、指定したメンバのうち、指定した引数リスト、修飾子、およびカルチャと一致するメンバを呼び出します。 .NET Compact Framework によってサポートされています。 |

_Type.InvokeMember メソッド

名前 | 説明 |
---|---|
_Type.InvokeMember (String, BindingFlags, Binder, Object, Object[]) | COM オブジェクトに、Type.InvokeMember メソッドへのバージョンに依存しないアクセスが用意されています。 |
_Type.InvokeMember (String, BindingFlags, Binder, Object, Object[], CultureInfo) | COM オブジェクトに、Type.InvokeMember メソッドへのバージョンに依存しないアクセスが用意されています。 |
_Type.InvokeMember (String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]) | COM オブジェクトに、Type.InvokeMember メソッドへのバージョンに依存しないアクセスが用意されています。 |

Weblioに収録されているすべての辞書からType.InvokeMemberを検索する場合は、下記のリンクをクリックしてください。

- Type.InvokeMemberのページへのリンク