首先聲明一點,你們都會說反射的效率低下,可是大多數的框架能少了反射嗎?當反射能爲咱們帶來代碼上的方便就能夠用,若有不當之處還望你們指出web
1,項目結構圖以下所示:一個ClassLb類庫項目,一個爲測試用的testReflect的webform項目,testReflect添加對ClassLb類庫項目的引用ajax
2,ClassLb類庫項目中我添加了兩個很是簡單的類,代碼以下框架
public class Class1 { public static string Insert(string a, string b) { return a + "," + b + "插入成功在Class1中"; } public static string Update(string a, string b) { return a + "," + b + "更新成功在Class1中"; } } public class Class2 { public static string Insert(string a, string b) { return "a,b插入成功在Class2中"; } public static string Update(string a, string b) { return "a,b更新成功在Class2中"; } }
3,webform項目在Default.aspx.cs中的測試代碼以下:注意,添加命名空間using System.Reflection;測試
/// <summary> /// 獲取類型 /// </summary> /// <param name="assemblyName">程序集名</param> /// <param name="typeName">類名</param> /// <returns></returns> private Type AccessType(string assemblyName, string typeName) { Type type = null; Assembly assembly = Assembly.Load(assemblyName); if (assembly == null) throw new Exception("Could not find assembly!"); type = assembly.GetType(assemblyName + "." + typeName); if (type == null) throw new Exception("Could not find type!"); return type; }
/// <summary> /// 執行方法獲取結果 /// </summary> /// <param name="assemblyName">程序集名</param> /// <param name="typeName">類名</param> /// <param name="method">方法名</param> /// <param name="arguments">方法所需參數</param> /// <returns></returns> public object ExecuteMethod(string assemblyName, string typeName, string method, params object[] arguments) { object returnObject = null; Type type = AccessType(assemblyName, typeName); returnObject = type.InvokeMember(method, BindingFlags.Default | BindingFlags.InvokeMethod, null, null, arguments); return returnObject; }
4,測試代碼以下:spa
protected void Page_Load(object sender, EventArgs e) { string a = ExecuteMethod("ClassLb", "Class1", "Insert", "sxd", "123").ToString(); Response.Write(a + "</br>"); string b = ExecuteMethod("ClassLb", "Class1", "Update", "sxd", "123").ToString(); Response.Write(b + "</br>"); string c = ExecuteMethod("ClassLb", "Class2", "Insert", "sxd", "123").ToString(); Response.Write(c + "</br>"); string d = ExecuteMethod("ClassLb", "Class2", "Update", "sxd", "123").ToString(); Response.Write(d + "</br>"); }
5,執行結果:code
6,心得體會,我作的上一個項目用到的是Jquery經過ajax調用webservice,webservice調用類庫方法,每個對象基本都有增刪改查操做,我在webservice中就要建四個操做的方法供ajax調用,寫了不少的webservice,每一個webservice又有好幾個方法,浪費了不少的時間,當我用上面所示的反射的時候只需用一個webservice,一個方法,前臺ajax調用的時候給我傳入相應的參數便可,這樣會大大提升開發速度,這只是個人一點體會,若是你們有更好的方法請一塊兒跟你們分享orm