Type.InvokeMemberとは? わかりやすく解説

Type.InvokeMember メソッド (String, BindingFlags, Binder, Object, Object[])

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

名前空間: System
アセンブリ: 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

パラメータ

name

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

または

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

または

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

invokeAttr

検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。アクセスは、Public、NonPublic、Private、InvokeMethod、GetField など、BindingFlags のうちの 1 つになります。検索の種類を指定する必要はありません。検索の種類を省略した場合は、BindingFlags.Public |BindingFlags.Instance が適用されます。

binder

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

または

DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing)。

target

指定したメンバの呼び出し元となる Object。

args

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

戻り値
呼び出されたメンバの戻り値を表す 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

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

AmbiguousMatchException

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

NotSupportedException

.NET Compact Framework は、現在このプロパティをサポートしていません。

解説解説

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

次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。

次の BindingFlags 呼び出しフラグは、メンバを使用して実行するアクションを指定するために使用できます。

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

次の条件が true の場合は、メソッドが呼び出されます。

バインダは一致するすべてのメソッドを検索します。これらのメソッドは、要求されるバインディングの種類に基づいて検索されます ( 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
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
Type クラス
Type メンバ
System 名前空間
String クラス
Binder
DefaultBinder
BindingFlags
ParameterModifier
ParameterAttributes
CultureInfo
ReflectionPermission

Type.InvokeMember メソッド (String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

派生クラスによってオーバーライドされた場合、指定したバインディング制約を使用し、指定したメンバのうち、指定した引数リスト、修飾子、およびカルチャと一致するメンバを呼び出します。

名前空間: System
アセンブリ: 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

パラメータ

name

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

または

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

または

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

invokeAttr

検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。アクセスは、Public、NonPublic、Private、InvokeMethod、GetField など、BindingFlags のうちの 1 つになります。検索の種類を指定する必要はありません。検索の種類を省略した場合は、BindingFlags.Public |BindingFlags.Instance が適用されます。

binder

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

または

DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing)。

target

指定したメンバの呼び出し元となる Object。

args

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

modifiers

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

culture

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

または

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

namedParameters

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

戻り値
呼び出されたメンバの戻り値を表す Object。

例外例外
例外の種類条件

ArgumentNullException

invokeAttr に CreateInstance が格納されていて、typeName が null 参照 (Visual Basic では Nothing) です。

ArgumentException

args が多次元です。

または

modifiers が多次元です。

または

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

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

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 修飾フラグは、検索方法を変更するために使用できます。

次の BindingFlags 呼び出しフラグは、メンバを使用して実行するアクションを指定するために使用できます。

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

次の条件が true の場合は、メソッドが呼び出されます。

バインダは一致するすべてのメソッドを検索します。これらのメソッドは、要求されるバインディングの種類に基づいて検索されます ( 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);

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

.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
Type クラス
Type メンバ
System 名前空間
String クラス
Binder
DefaultBinder
BindingFlags
ParameterModifier
ParameterAttributes
CultureInfo
ReflectionPermission

Type.InvokeMember メソッド (String, BindingFlags, Binder, Object, Object[], CultureInfo)

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

名前空間: System
アセンブリ: 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

パラメータ

name

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

または

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

または

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

invokeAttr

検索の実行方法を指定する 1 つ以上の BindingFlags から成るビット マスク。アクセスは、Public、NonPublic、Private、InvokeMethod、GetField など、BindingFlags のうちの 1 つになります。検索の種類を指定する必要はありません。検索の種類を省略した場合は、BindingFlags.Public |BindingFlags.Instance が適用されます。

binder

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

または

DefaultBinder を使用する場合は null 参照 (Visual Basic では Nothing)。

target

指定したメンバの呼び出し元となる Object。

args

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

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

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

AmbiguousMatchException

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

解説解説

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

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

次の BindingFlags 修飾フラグは、検索方法を変更するために使用できます。

次の BindingFlags 呼び出しフラグは、メンバを使用して実行するアクションを指定するために使用できます。

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

次の条件が true の場合は、メソッドが呼び出されます。

バインダは一致するすべてのメソッドを検索します。これらのメソッドは、要求されるバインディングの種類に基づいて検索されます ( 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 しか使用できない場合があります。

.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
Type クラス
Type メンバ
System 名前空間
String クラス
Binder
DefaultBinder
BindingFlags
ParameterModifier
ParameterAttributes
CultureInfo
ReflectionPermission

Type.InvokeMember メソッド


_Type.InvokeMember メソッド

COM オブジェクトに、System.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 メソッドへのバージョンに依存しないアクセスが用意されています。
参照参照

関連項目

_Type インターフェイス
_Type メンバ
System.Runtime.InteropServices 名前空間



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「Type.InvokeMember」の関連用語

Type.InvokeMemberのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Type.InvokeMemberのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS