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 から成るビット マスクアクセスは、PublicNonPublicPrivateInvokeMethodGetField など、BindingFlags のうちの 1 つなります検索種類指定する要はありません。検索種類省略した場合は、BindingFlags.Public |BindingFlags.Instance適用されます。

binder

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

または

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

target

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

args

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

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

例外例外
例外種類条件

ArgumentNullException

invokeAttrCreateInstance格納されていて、typeNamenull 参照 (Visual Basic では Nothing) です。

ArgumentException

args多次元です。

または

invokeAttr有効な BindingFlags 属性ではありません。

または

invokeAttr に、InvokeMethodGetFieldSetFieldGetProperty、または SetProperty組み合わされCreateInstance格納されています。

または

invokeAttr に、GetFieldSetField格納されています。

または

invokeAttr に、GetPropertySetProperty格納されています。

または

invokeAttr に、SetField または SetProperty組み合わされInvokeMethod格納されています。

または

invokeAttrSetField格納されていて、args複数要素あります

または

このメソッドCOM オブジェクトに対して呼び出されバインディング フラグ BindingFlags.InvokeMethodBindingFlags.GetPropertyBindingFlags.SetPropertyBindingFlags.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場合は、メソッド呼び出されます。

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

メソッドは、選択された後に呼び出されます。その時点で、アクセスできるかどうか確認されます。検索では、メソッド関連付けられているアクセシビリティ属性基づいて、どのメソッド セット検索するかを制御できます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 から成るビット マスクアクセスは、PublicNonPublicPrivateInvokeMethodGetField など、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

invokeAttrCreateInstance格納されていて、typeNamenull 参照 (Visual Basic では Nothing) です。

ArgumentException

args多次元です。

または

modifiers多次元です。

または

argsmodifiers長さ異なります

または

invokeAttr有効な BindingFlags 属性ではありません。

または

invokeAttr に、InvokeMethodGetFieldSetFieldGetProperty、または SetProperty組み合わされCreateInstance格納されています。

または

invokeAttr に、GetFieldSetField格納されています。

または

invokeAttr に、GetPropertySetProperty格納されています。

または

invokeAttr に、SetField または SetProperty組み合わされInvokeMethod格納されています。

または

invokeAttrSetField格納されていて、args複数要素あります

または

この名前付パラメータ配列は、引数配列よりも大きくなります

または

このメソッドCOM オブジェクトに対して呼び出されバインディング フラグ BindingFlags.InvokeMethodBindingFlags.GetPropertyBindingFlags.SetPropertyBindingFlags.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 抽象クラス使用してmodifiersculture処理するカスタム バインダ記述できます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場合は、メソッド呼び出されます。

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

メソッドは、選択された後に呼び出されます。その時点で、アクセスできるかどうか確認されます。検索では、メソッド関連付けられているアクセシビリティ属性基づいて、どのメソッド セット検索するかを制御できます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 から成るビット マスクアクセスは、PublicNonPublicPrivateInvokeMethodGetField など、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

invokeAttrCreateInstance格納されていて、typeNamenull 参照 (Visual Basic では Nothing) です。

ArgumentException

args多次元です。

または

invokeAttr有効な BindingFlags 属性ではありません。

または

invokeAttr に、InvokeMethodGetFieldSetFieldGetProperty、または SetProperty組み合わされCreateInstance格納されています。

または

invokeAttr に、GetFieldSetField格納されています。

または

invokeAttr に、GetPropertySetProperty格納されています。

または

invokeAttr に、SetField または SetProperty組み合わされInvokeMethod格納されています。

または

invokeAttrSetField格納されていて、args複数要素あります

または

このメソッドCOM オブジェクトに対して呼び出されバインディング フラグ BindingFlags.InvokeMethodBindingFlags.GetPropertyBindingFlags.SetPropertyBindingFlags.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場合は、メソッド呼び出されます。

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

メソッドは、選択された後に呼び出されます。その時点で、アクセスできるかどうか確認されます。検索では、メソッド関連付けられているアクセシビリティ属性基づいて、どのメソッド セット検索するかを制御できます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 名前空間


このページでは「.NET Framework クラス ライブラリ リファレンス」からType.InvokeMemberを検索した結果を表示しています。
Weblioに収録されているすべての辞書からType.InvokeMemberを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からType.InvokeMember を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Type.InvokeMember」の関連用語

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

   

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



Type.InvokeMemberのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

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

©2025 GRAS Group, Inc.RSS