3

スレッドのように、ユーザーがこの質問に取り組むのを見たことがあります: C#の非常に動的な呼び出し

しかし、私は与えられたコードであまり成功していません。基本的に、変数文字列を使用してメソッドを呼び出そうとしています。

これが私がこれまでに持っているものです。

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Model : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

       string TargetMethod = "Index";
       Type t = System.Type.GetType("_Model");

       System.Reflection.MethodInfo methodInfo = t.GetMethod(TargetMethod);
       methodInfo.Invoke(t, new object[] {});

    }

     protected void Index(){
       Response.Write("Index: Dynamically called!"); 
     }

}

ビューページに、「インデックス:動的に呼び出されました!」という文字列が表示されます。画面に書き込まれましたが、エラーが発生します:

例外の詳細:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

助けてください、ありがとう。

4

1 に答える 1

3

デフォルトでは、メソッドGetMethodのみを返します。public追加BindingFlags.NonPublic | BindingFlags.Instanceすれば動作するはずです。

var methodInfo = t.GetMethod(TargetMethod,
      BindingFlags.NonPublic | BindingFlags.Instance);

または公的および非公的の両方のために働くために:

var methodInfo = t.GetMethod(TargetMethod,
      BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

また、これはインスタンスメソッドであり、現在のインスタンスで呼び出す必要があるため、次のようになります。

methodInfo.Invoke(this, new object[] {});

thisではなく、に注意してくださいt

于 2013-03-15T13:26:40.777 に答える