反射的妙用-类名方法名做参数进行方法调用实例demo
生活随笔
收集整理的這篇文章主要介紹了
反射的妙用-类名方法名做参数进行方法调用实例demo
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先聲明一點,大家都會說反射的效率低下,但是大多數的框架能少了反射嗎?當反射能為我們帶來代碼上的方便就可以用,如有不當之處還望大家指出
1,項目結構圖如下所示:一個ClassLb類庫項目,一個為測試用的testReflect的webform項目,testReflect添加對ClassLb類庫項目的引用
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,測試代碼如下:
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,執行結果:
6,心得體會,我做的上一個項目用到的是Jquery通過ajax調用webservice,webservice調用類庫方法,每一個對象基本都有增刪改查操作,我在webservice中就要建四個操作的方法供ajax調用,寫了很多的webservice,每個webservice又有好幾個方法,浪費了很多的時間,當我用上面所示的反射的時候只需用一個webservice,一個方法,前臺ajax調用的時候給我傳入相應的參數即可,這樣會大大提高開發速度,這只是我的一點體會,如果大家有更好的方法請一起跟大家分享
?
轉載于:https://www.cnblogs.com/shixudong/p/3667597.html
總結
以上是生活随笔為你收集整理的反射的妙用-类名方法名做参数进行方法调用实例demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS字符串常用用法
- 下一篇: 《Cracking the Coding