情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

MethodBase.Invoke メソッド (Object, Object[])

2013/12/12

指定したパラメーターを使用して、現在のインスタンスによって表されるメソッドまたはコンストラクターを呼び出します。

Namespace:  System.Reflection
アセンブリ:  mscorlib (mscorlib.dll 内)

public Object Invoke(
	Object obj,
	Object[] parameters
)

パラメーター

obj
型: System.Object
メソッドまたはコンストラクターを呼び出すオブジェクト。メソッドが静的である場合、この引数は無視されます。コンストラクターが静的である場合、この引数は null であるか、またはコンストラクターを定義するクラスのインスタンスでなければなりません。
parameters
型: System.Object []
呼び出すメソッドまたはコンストラクターの引数リスト。これは、呼び出すメソッドまたはコンストラクターのパラメーターと同じ数、順序、および型のオブジェクトの配列です。パラメーターがない場合、parametersnull になります。
このインスタンスで表されるメソッドまたはコンストラクターが ref パラメーター (Visual Basic では ByRef) を受け取る場合、この関数を使用してメソッドまたはコンストラクターを呼び出すために、このパラメーターに特別な属性は必要ありません。この配列の中で、何らかの値で明示的に初期化されないオブジェクトには、そのオブジェクト型の既定値が格納されます。参照型の要素の場合、この値は null です。値型の要素の場合、この値は、実際の要素の型に応じて 0、0.0、または false になります。

戻り値

型: System.Object
呼び出されたメソッドの戻り値。コンストラクターの場合は null
注意注意:

ref または out キーワードで宣言されたパラメーターを表す parameters 配列の要素も変更できます。

例外条件
TargetException

obj パラメーターが null で、メソッドが静的ではありません。

または

メソッドが、obj のクラスで宣言または継承されていません。

または

静的コンストラクターが呼び出されており、objnull またはそのコンストラクターを宣言したクラスのインスタンスのいずれでもありません。

ArgumentException

parameters 配列の要素が、このインスタンスでリフレクションされたメソッドまたはコンストラクターのシグネチャと一致しません。

TargetInvocationException

呼び出されたメソッドまたはコンストラクターが例外をスローします。

TargetParameterCountException

parameters 配列に、正しい数の引数が格納されていません。

MethodAccessException

メソッドまたはコンストラクターにアクセスできません。

InvalidOperationException

メソッドを宣言する型がオープン ジェネリック型です。つまり、Type.ContainsGenericParameters プロパティは宣言型に対して true を返します。

Windows Phone アプリでは、アクセスできるメソッドのみをリフレクションで呼び出すことができます。

Invoke(Object, Object[]) は、invokeAttr に対して Default を渡し、binder および culture に対して null を渡して、Invoke(Object, BindingFlags, Binder, Object[], CultureInfo) メソッド オーバーロードを呼び出す便利なオーバーロードです。

呼び出されたメソッドが例外をスローした場合、Exception.GetBaseException メソッドはその例外を返します。

MethodInfo オブジェクトを使用して静的メソッドを呼び出すには、obj に対して null を渡します。

メモメモ:

このメソッド オーバーロードを使用してインスタンス コンストラクターを呼び出した場合、obj に提供されたオブジェクトが再初期化されます。つまり、すべてのインスタンス初期化子が実行されます。戻り値が null です。クラス コンストラクターを呼び出した場合は、クラスが再初期化されます。つまり、すべてのクラス初期化子が実行されます。戻り値が null です。

現在のメソッドのパラメーターが値型であり、parameters 内の対応する引数が null の場合は、ランタイムは 0 で初期化される値型のインスタンスを渡します。

リフレクションを使用して、動的メソッド検索を実行する例を次に示します。遅延バインディングはオーバーライドを解決できないため、基本クラスの MethodInfo オブジェクトを使用して、派生クラスでオーバーライドされたメソッドを呼び出すことはできません。

メモメモ:

この例を実行するには、「Windows Phone での静的 TextBlock コントロールのあるコード例のビルド」を参照してください。


using System;
using System.Reflection;

public class A
{
   public virtual int method() { return 0; }
}

public class B
{
   public virtual int method() { return 1; }
}

class Example
{
   public static int Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      outputBlock.Text += "Reflection.MethodInfo\n";
      A MyA = new A();
      B MyB = new B();

      // Get the Type and MethodInfo.
      Type MyTypea = typeof(A);
      MethodInfo Examplea = MyTypea.GetMethod("method");

      Type MyTypeb = typeof(B);
      MethodInfo Exampleb = MyTypeb.GetMethod("method");

      // Get and display the Invoke method.
      outputBlock.Text += "\nFirst method - " + MyTypea.FullName +
          " returns " + Examplea.Invoke(MyA, null);
      outputBlock.Text += "\nSecond method - " + MyTypeb.FullName +
          " returns " + Exampleb.Invoke(MyB, null);
      return 0;
   }
}

/* This code produces output similar to the following:

First method - A returns 0
Second method - B returns 1
 */


Windows Phone OS

サポート: 8.0, 7.1, 7.0

表示: