.net 反射方法调用(转)

1. 利用.net反射调用 方法
  protected void invokeTheMethod(object theObject, string strMethod, object[] objParms)
        {
            Type objType = theObject.GetType();  //--得到对象的类型 cyj 2011-3-28
          
            MethodInfo method;  //--声明一个方法 cyj 2011-3-28
            try
            {
                method = objType.GetMethod(strMethod);  //--根据方法名称得到方法 cyj 2011-3-28
                method.Invoke(theObject, objParms);     //--连接类型与方法 cyj 2011-3-28
            }
            catch (Exception)
            {
                throw (new Exception("刷新分页控件出错"));
                // Response.Write(ex.ToString());
            }
        }

调用该方法:invokeTheMethod(uControls,"getString",null);

总结:1. 得到对象(用户控件uControls)的类型
      2. 声明一个方法
      3. 将方法与类型相连;

摘自:http://www.pqshow.com/program/aspnet/201101/15525.html

 

 

最近在维护一个Extjs的项目,所以前提基本上都是js,利用.net后台的交互获取数据。

故利用反射来执行页面的一些方法,可以省下不少事情。代码如下:

在page_load方法中,实现反射代码,并添加一个需反射执行的方法。先看一个没有参数的函数:

 

代码

   protected void Page_Load(object sender, EventArgs e)
        {
          
            string methordName = "GetResString";
            // 或者  methordName = Request.QueryString["action"];
            Type t = this.GetType();
            MethodInfo method = t.GetMethod(methordName);
            if (method != null)
            {
                Response.Write((string)method.Invoke(this,null));
            }
            
        }

    public string GetResString() 
    {
        return "Test";

    }

 

 

 

 运行的结果页面就可以在页面上输出Test字样了。

 

 添加一个需传参数的反射例子。

如:

代码

   protected void Page_Load(object sender, EventArgs e)
        {
          
            string methordName = "GetResString";
            // 或者  methordName = Request.QueryString["action"];
            Type t = this.GetType();
            object[] paras={"小强",23};//方法需调用的参数
            Type[] typepara=new Type[paras.Length];
            for(int i=0;i<paras.Length;i++)
            {
                 typepara[i]=paras[i].GetType();
            }
            MethodInfo method = t.GetMethod(methordName,typepara);
            if (method != null)
            {
                Response.Write((string)method.Invoke(this, paras));
            }
            
        }

        public string GetResString(string name,int age) 
        {
            return string.Format("{0}已经{1}岁了", name, age);
        }

 

 

页面执行结果为:小强已经23岁了。

如果前台页面用:..Default.aspx?action=GetResString 也能达到同样的效果。

posted on 2012-06-02 12:27  沈建宏  阅读(569)  评论(0编辑  收藏  举报

导航