次の方法で共有


IReflect.InvokeMember メソッド

定義

指定されたメンバーを呼び出します。

public:
 System::Object ^ InvokeMember(System::String ^ name, System::Reflection::BindingFlags invokeAttr, System::Reflection::Binder ^ binder, System::Object ^ target, cli::array <System::Object ^> ^ args, cli::array <System::Reflection::ParameterModifier> ^ modifiers, System::Globalization::CultureInfo ^ culture, cli::array <System::String ^> ^ namedParameters);
public object? InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object? target, object?[]? args, System.Reflection.ParameterModifier[]? modifiers, System.Globalization.CultureInfo? culture, string[]? namedParameters);
public object InvokeMember (string name, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, object target, object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, string[] namedParameters);
abstract member InvokeMember : string * System.Reflection.BindingFlags * System.Reflection.Binder * obj * obj[] * System.Reflection.ParameterModifier[] * System.Globalization.CultureInfo * string[] -> obj
Public Function InvokeMember (name As String, invokeAttr As BindingFlags, binder As Binder, target As Object, args As Object(), modifiers As ParameterModifier(), culture As CultureInfo, namedParameters As String()) As Object

パラメーター

name
String

検索対象のメンバーの名前。

invokeAttr
BindingFlags

BindingFlags 呼び出し属性の 1 つ。 invokeAttrパラメーターには、コンストラクター、メソッド、プロパティ、フィールドなどを指定できます。 適切な呼び出し属性を指定する必要があります。 メンバーの名前として空の文字列 ("") を渡すことによって、クラスの既定のメンバーを呼び出します。

binder
Binder

BindingFlags ビット フラグの 1 つ。 このメソッドに関連するプロパティを格納する Binder を実装します。

target
Object

指定したメンバーを呼び出す対象となるオブジェクト。 静的メンバーの場合、このパラメーターは無視されます。

args
Object[]

呼び出すメンバーのパラメーターの数、順序、および型を格納するオブジェクトの配列。 パラメーターがない場合は、空の配列です。

modifiers
ParameterModifier[]

ParameterModifier オブジェクトの配列。 この配列は、メタデータにある呼び出されたメンバーの引数属性を表す args パラメーターと同じ長さです。 パラメーターには、属性 pdInpdOutpdRetvalpdOptional、および pdHasDefault を使用できます。 これらはそれぞれ、[In]、[Out]、[retval]、[optional]、および既定のパラメーターを表します。 これらの属性は、さまざまな相互運用性サービスで使用されます。

culture
CultureInfo

型の強制変換を制御するために使用する CultureInfo のインスタンス。 たとえば、culture は 1000 を表す文字列を Double 値に変換します。これは、カルチャによって 1000 の表記が異なるためです。 このパラメーターが null の場合は、現在のスレッドの CultureInfo が使用されます。

namedParameters
String[]

パラメーターの文字列配列。

戻り値

指定されたメンバー。

例外

フィールド set に複数の引数が指定されています。

フィールドまたはプロパティが見つかりません。

メソッドが見つかりません。

必要な ReflectionPermission がない状態でプライベート メンバーが呼び出されました。

次の例では、 プロパティの値を Now 取得します。

#using <System.DLL>

using namespace System;
using namespace System::Reflection;

#define NULL 0
void main()
{
   Type^ tDate = Type::GetType( L"System.DateTime" );
   Object^ result = tDate->InvokeMember( L"Now", BindingFlags::GetProperty, nullptr, NULL, gcnew array<Object^>(0) );
   Console::WriteLine( result->ToString() );
}
using System;
using System.Reflection;

public class MainClass
{
    public static void Main(string[] args)
    {
        Type tDate = typeof(System.DateTime);
        Object result = tDate.InvokeMember("Now",
            BindingFlags.GetProperty, null, null, new Object[0]);
        Console.WriteLine(result.ToString());
    }
}
Imports System.Reflection

Public Class MainClass
    Public Overloads Shared Sub Main(ByVal args() As String)
        Dim tDate As Type = GetType(System.DateTime)
        Dim result As [Object] = tDate.InvokeMember("Now", _
            BindingFlags.GetProperty, Nothing, Nothing, New [Object](-1) {})
        Console.WriteLine(result.ToString())
    End Sub
End Class

注釈

呼び出すメソッドはアクセス可能でなければならず、指定したバインダーと呼び出し属性の制約の下で、指定された引数リストに対する一致の特定性が最高のものでなければなりません。

メソッド宣言内のパラメーターの数が指定した引数リスト内の引数の数と等しく、各引数の型をバインダーによってパラメーターの型に変換できる場合、メソッドが呼び出されます。

注意

メソッドに渡される InvokeMember パラメーター修飾子の配列には、1 つのパラメーター修飾子が含まれている必要があります。 COM に公開するときに参照渡しする必要がある引数を決定する場合は、最初のパラメーター修飾子のみが考慮されます。

バインダーは、要求されたバインディングの種類 (BindingFlags.InvokeMethod、、など) に従って、 GetProperties一致するすべてのメソッドを検索します。 メソッドのセットは、名前、引数の数、およびバインダーで定義されている検索修飾子のセットによってフィルター処理されます。 メソッドを選択すると、そのメソッドが呼び出され、その時点でアクセシビリティがチェックされます。 検索では、 メソッドに関連付けられているアクセシビリティ属性に基づいて検索するメソッドのセットを制御できます。 BindToMethod は、呼び出されるメソッドを選択します。 既定のバインダーは、最も具体的な一致を選択します。

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

適用対象

こちらもご覧ください