次の方法で共有


IReflect.InvokeMember メソッド

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

Function InvokeMember( _
   ByVal name As String, _   ByVal invokeAttr As BindingFlags, _   ByVal binder As Binder, _   ByVal target As Object, _   ByVal args() As Object, _   ByVal modifiers() As ParameterModifier, _   ByVal culture As CultureInfo, _   ByVal namedParameters() As String _) As Object
[C#]
object InvokeMember(
   stringname,BindingFlagsinvokeAttr,Binderbinder,objecttarget,object[] args,ParameterModifier[] modifiers,CultureInfoculture,string[] namedParameters);
[C++]
Object* InvokeMember(
   String* name,BindingFlagsinvokeAttr,Binder* binder,Object* target,Object* args __gc[],ParameterModifiermodifiers[],CultureInfo* culture,String* namedParameters __gc[]);
[JScript]
function InvokeMember(
   name : String,invokeAttr : BindingFlags,binder : Binder,target : Object,args : Object[],modifiers : ParameterModifier[],culture : CultureInfo,namedParameters : String[]) : Object;

パラメータ

  • name
    検索対象のメンバの名前。
  • invokeAttr
    BindingFlags 呼び出し属性の 1 つ。 invokeAttr パラメータには、コンストラクタ、メソッド、プロパティ、フィールドなどを指定できます。適切な呼び出し属性を指定する必要があります。メンバの名前として空の文字列 ("") を渡すことによって、クラスの既定のメンバを呼び出します。
  • binder
    BindingFlags ビット フラグの 1 つ。このメソッドに関連するプロパティを格納する Binder を実装します。
  • target
    指定したメンバを呼び出す対象となるオブジェクト。静的メンバの場合、このパラメータは無視されます。
  • args
    呼び出すメンバのパラメータの数、順序、および型を格納するオブジェクトの配列。パラメータがない場合は、空の配列です。
  • modifiers
    ParameterModifier オブジェクトの配列。この配列は、メタデータにある呼び出されたメンバの引数属性を表す args パラメータと同じ長さです。パラメータには、属性 pdInpdOutpdRetvalpdOptional 、および pdHasDefault を使用できます。これらはそれぞれ、[In]、[Out]、[retval]、[optional]、および既定のパラメータを表します。これらの属性は、さまざまな相互運用性サービスで使用されます。
  • culture
    型の強制変換を制御するために使用する CultureInfo のインスタンス。たとえば、culture は 1000 を表す文字列を double 値に変換します。これは、カルチャによって 1000 の表記が異なるためです。このパラメータが null 参照 (Visual Basic では Nothing) の場合は、現在のスレッドの CultureInfo が使用されます。
  • namedParameters
    パラメータの文字列配列。

戻り値

指定されたメンバ。

例外

例外の種類 条件
ArgumentException invokeAttrBindingFlags.CreateInstance で、その他のビット フラグも設定されています。
ArgumentException invokeAttrBindingFlags.CreateInstance ではなく、name が null 参照 (Visual Basic では Nothing) です。
ArgumentException invokeAttrBindingFlags の呼び出し属性ではありません。
ArgumentException プロパティまたはフィールドに対して、 invokeAttr の get と set が両方指定されています。
ArgumentException invokeAttr でフィールド set と Invoke メソッドの両方が指定されています。 args はフィールド get 用です。
ArgumentException フィールド set に複数の引数が指定されています。
MissingFieldException フィールドまたはプロパティが見つかりません。
MissingMethodException メソッドが見つかりません。
SecurityException 必要な ReflectionPermission がない状態でプライベート メンバが呼び出されました。

解説

呼び出されるメソッドは、アクセスできる必要があり、指定したバインダと呼び出し属性の制約の下で、指定した引数リストと最も的確に一致します。

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

メモ    InvokeMember に渡すパラメータ修飾子の配列に含めることができるパラメータ修飾子は 1 つだけです。COM に公開するときに参照で渡す必要がある引数を判断するときは、最初のパラメータ修飾子だけが対象になります。

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

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

使用例

[Visual Basic, C#, C++] Now プロパティの値を取得する例を次に示します。

 
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic

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

[C#] 
using System;
using System.Reflection;

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

[C++] 
#using <mscorlib.dll>
#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, NULL, NULL, new Object*[0]);
    Console::WriteLine(result->ToString());
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

IReflect インターフェイス | IReflect メンバ | System.Reflection 名前空間 | Object | Binder | BindingFlags