asp.net的一般处理程序我想大家用得都不少,经常会如下如下的代码:
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading; using System.Web; namespace MyWeb { /// <summary> /// GetMsg 的摘要说明 /// </summary> public class GetMsg : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; String fn=context.Request["fn"]; //根据参数判断执行哪一个方法 switch(fn){ case "Search": Search(context); break; case "Search": Add(context); break; } } public void Search(HttpContext context) { context.Response.Write("新增"); } public void Add(HttpContext context) { context.Response.Write("新增"); } public bool IsReusable { get { return false; } } } }
看到如上代码可能觉得没有问题,但是如果我们新增一个方法,那么就需要在ProcessRequest方法的switch中增加一个对应的映射,感觉挺麻烦的,现将ProcessRequest方法修改如下:
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; String fn=context.Request["fn"]; MethodInfo method= this.GetType().GetMethod(fn); if (method != null) { method.Invoke(this, new object[] { context }); } }
OK,这就是利用反射原理调用指定方法,是不是感觉瞬间简化多了呢!