反射的妙用-类名方法名做参数进行方法调用实例demo
首先聲明一點(diǎn),大家都會(huì)說(shuō)反射的效率低下,但是大多數(shù)的框架能少了反射嗎?當(dāng)反射能為我們帶來(lái)代碼上的方便就可以用,如有不當(dāng)之處還望大家指出
1,項(xiàng)目結(jié)構(gòu)圖如下所示:一個(gè)ClassLb類庫(kù)項(xiàng)目,一個(gè)為測(cè)試用的testReflect的webform項(xiàng)目,testReflect添加對(duì)ClassLb類庫(kù)項(xiàng)目的引用
2,ClassLb類庫(kù)項(xiàng)目中我添加了兩個(gè)非常簡(jiǎn)單的類,代碼如下
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項(xiàng)目在Default.aspx.cs中的測(cè)試代碼如下:注意,添加命名空間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>/// 執(zhí)行方法獲取結(jié)果/// </summary>/// <param name="assemblyName">程序集名</param>/// <param name="typeName">類名</param>/// <param name="method">方法名</param>/// <param name="arguments">方法所需參數(shù)</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,測(cè)試代碼如下:
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,執(zhí)行結(jié)果:
6,心得體會(huì),我做的上一個(gè)項(xiàng)目用到的是Jquery通過(guò)ajax調(diào)用webservice,webservice調(diào)用類庫(kù)方法,每一個(gè)對(duì)象基本都有增刪改查操作,我在webservice中就要建四個(gè)操作的方法供ajax調(diào)用,寫了很多的webservice,每個(gè)webservice又有好幾個(gè)方法,浪費(fèi)了很多的時(shí)間,當(dāng)我用上面所示的反射的時(shí)候只需用一個(gè)webservice,一個(gè)方法,前臺(tái)ajax調(diào)用的時(shí)候給我傳入相應(yīng)的參數(shù)即可,這樣會(huì)大大提高開發(fā)速度,這只是我的一點(diǎn)體會(huì),如果大家有更好的方法請(qǐng)一起跟大家分享
?
轉(zhuǎn)載于:https://www.cnblogs.com/shixudong/p/3667597.html
總結(jié)
以上是生活随笔為你收集整理的反射的妙用-类名方法名做参数进行方法调用实例demo的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: iOS字符串常用用法
- 下一篇: 《Cracking the Coding