反射的妙用-类名方法名做参数进行方法调用实例demo
2014-04-15 22:59
489 查看
首先声明一点,大家都会说反射的效率低下,但是大多数的框架能少了反射吗?当反射能为我们带来代码上的方便就可以用,如有不当之处还望大家指出
1,项目结构图如下所示:一个ClassLb类库项目,一个为测试用的testReflect的webform项目,testReflect添加对ClassLb类库项目的引用
![](http://images.cnitblog.com/i/486743/201404/152237483225310.jpg)
2,ClassLb类库项目中我添加了两个非常简单的类,代码如下
3,webform项目在Default.aspx.cs中的测试代码如下:注意,添加命名空间using System.Reflection;
4,测试代码如下:
5,执行结果:
![](http://images.cnitblog.com/i/486743/201404/152250541826726.jpg)
6,心得体会,我做的上一个项目用到的是Jquery通过ajax调用webservice,webservice调用类库方法,每一个对象基本都有增删改查操作,我在webservice中就要建四个操作的方法供ajax调用,写了很多的webservice,每个webservice又有好几个方法,浪费了很多的时间,当我用上面所示的反射的时候只需用一个webservice,一个方法,前台ajax调用的时候给我传入相应的参数即可,这样会大大提高开发速度,这只是我的一点体会,如果大家有更好的方法请一起跟大家分享
1,项目结构图如下所示:一个ClassLb类库项目,一个为测试用的testReflect的webform项目,testReflect添加对ClassLb类库项目的引用
![](http://images.cnitblog.com/i/486743/201404/152237483225310.jpg)
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,执行结果:
![](http://images.cnitblog.com/i/486743/201404/152250541826726.jpg)
6,心得体会,我做的上一个项目用到的是Jquery通过ajax调用webservice,webservice调用类库方法,每一个对象基本都有增删改查操作,我在webservice中就要建四个操作的方法供ajax调用,写了很多的webservice,每个webservice又有好几个方法,浪费了很多的时间,当我用上面所示的反射的时候只需用一个webservice,一个方法,前台ajax调用的时候给我传入相应的参数即可,这样会大大提高开发速度,这只是我的一点体会,如果大家有更好的方法请一起跟大家分享
相关文章推荐
- [No000085]C#反射Demo,通过类名(String)创建类实例,通过方法名(String)调用方法
- 利用GetType反射方法再调用方法进行传递参数实现调用
- 对接收数组参数的成员方法进行反射——Method的一个demo
- 反射机制进行动态调用的两种创建方法实例与hama中的反射机制
- java通过反射Class实例调用对象方法
- 定义平面中的一个Circle类, 1编写一个无参数构造函数, 2编写一个有参的构造函数 3在主函数中调用无参构造函数生成圆的实例c1,调用有参构造函数生成圆的实例c2,调用实例方法判断c1和c2是否重
- 实例详解Java中如何对方法进行调用
- 如何使用反射创建类实例,并调用方法.
- 怎么生成内部hide接口实例并通过反射作为参数进行传递
- JS调用OC简单实例-传递一个或者多个参数给oc方法
- 对对象类型和调用方法属性进行存储以提升反射性能
- java反射获取类实例并调用私有方法
- 问题(怎样在dephi中引用.net中定义的类.方法参数,参数类型为XMLdocument?我要调用此方法并把实例花的xmldocument类型的变量作为参数给它。)
- 对接收数组参数的成员方法进行反射
- Spring boot进行参数校验的方法实例详解
- Android获取其他包的Context实例,然后调用它的方法,反射!!!
- C#,动态加载DLL,通过反射,调用参数,方法,窗体
- 通过Java反射调用方法的实例,通过这个例子,能明白怎么用反射。
- 在前端调用ajax时,需要将参数传到前端,使用session赋值的方法进行传值,不能使用ModelMap或Model
- C#反射新建类实例和调用类方法及属性帮助类 以及获取或设置对象属性中字段值帮助类