首先声明一点,大家都会说反射的效率低下,但是大多数的框架能少了反射吗?当反射能为我们带来代码上的方便就可以用,如有不当之处还望大家指出

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", "").ToString();
Response.Write(a + "</br>");
string b = ExecuteMethod("ClassLb", "Class1", "Update", "sxd", "").ToString();
Response.Write(b + "</br>");
string c = ExecuteMethod("ClassLb", "Class2", "Insert", "sxd", "").ToString();
Response.Write(c + "</br>");
string d = ExecuteMethod("ClassLb", "Class2", "Update", "sxd", "").ToString();
Response.Write(d + "</br>");
}

5,执行结果:

6,心得体会,我做的上一个项目用到的是Jquery通过ajax调用webservice,webservice调用类库方法,每一个对象基本都有增删改查操作,我在webservice中就要建四个操作的方法供ajax调用,写了很多的webservice,每个webservice又有好几个方法,浪费了很多的时间,当我用上面所示的反射的时候只需用一个webservice,一个方法,前台ajax调用的时候给我传入相应的参数即可,这样会大大提高开发速度,这只是我的一点体会,如果大家有更好的方法请一起跟大家分享

反射的妙用-类名方法名做参数进行方法调用实例demo的更多相关文章

  1. java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同

    java  重写你可以这么理解    因为   方法名和参数类型个数相同  所以这就是重写了    然后  因为是重写  所以  返回值必须相同

  2. 类名+函数名(参数1,参数2.....){.......return this;}

    下述的函数是这样定义的: 类名+函数名(参数1,参数2.....){.......return this;} int +函数名(参数1,参数2.....){.......return int;} sh ...

  3. OC基础--对象做参数在方法间传递

    剧情描述: 美国大兵抗把汉阳造 拿着5个弹夹(每个弹夹5发子弹) 带着弟兄们干架 子弹打完了就求救 类: 士兵: 属性: 姓名(_name) 身高(_height) 体重(_weight) 行为: 开 ...

  4. 方法名太多,使用方法的重载(overload)来解决

    package chapter04; /* 问题:方法名太多了,不容易记忆,有时会出错 使用方法的重载(overload)来解决 */public class C09_Method { public ...

  5. JavaScript三种方法获取地址栏参数的方法

    今天碰到要在一个页面获取另外一个页面url传过来的参数,一开始很本能的想到了用 split(“?”)这样一步步的分解出需要的参数. 后来想了一下,肯定会有更加简单的方法的!所以在网上找到了两个很又简单 ...

  6. java反射机制,通过类名获取对象,通过方法名和参数调

    import java.lang.reflect.Method;   import javax.persistence.Table; /**  * 通过注解javax.persistence.Tabl ...

  7. Python函数名做参数,闭包,装饰器

    简单讲解闭包的写法和应用,在这之前,先声明,你定义的任意一个函数都可以作为其他函数的参数.就像下面这段代码的参数func,接收的参数就是一个函数名,在函数体内部使用了func()调用执行函数. 请看下 ...

  8. 通过方法名(字符串)执行Objective-C方法

    SEL selector = NSSelectorFromString(@"方法名"); if ([self respondsToSelector:selector]){ //判断 ...

  9. setTimeout关于函数名做参数的问题

    前几天在调bug时发现一个诡异的问题. function test(){ alert('4 seconds!'); } setTimeout(test(),4000); 这段代码立即执行,当时看不出问 ...

随机推荐

  1. js字符串与十六进制之间的转换

    在寻找加密解密的时候看到一个方法,代码图片转换.原理为:字符可以转为16进制,与图片RGB的一个R/G/B相对应,即一个像素点可容纳3个字符(注:Canvas的RGBA,透明度A似乎不能使用,使用后, ...

  2. HBase数据模型(2)

    HBase数据模型(1) HBase数据模型(2) 1.0 HBase的版本version,是一个用长整型表示的.由Rowkey.Column(列族和列).Version组合在一起称为HBase中的一 ...

  3. python读xml文件

    # -*- coding:utf-8 -*- import jsonimport requestsimport os curpath=os.path.dirname(os.path.realpath( ...

  4. SQL Server AlwaysON从入门到进阶(6)——分析和部署AlwaysOn Availability Group

    前言:   本节是整个系列的重点文章,到现在,读者应该已经对整个高可用架构有一定的了解,知道独立的SQL Server实例和基于群集的SQL Server FCI的区别.上一节已经介绍了如何安装SQL ...

  5. Python+selenium之疑难点解决之去除readonly的限制

    去除文本框的readonly只读模式的限制 如图所示:去除卡号readonly限制 代码如图所示: js = 'document.getElementById("cardNo"). ...

  6. 洛谷——普及练习场 普及组选手可冲刺训练,提高组选手亦可在此巩固基础。(Loading...)

    简单的模拟 关卡2-1,6 道题 开始普及组的训练!所谓模拟,就是直接根据题意编写,思维难度简单. //T1 铺地毯 #include <cstdio> #define N 10005 i ...

  7. UVA 11214 Guarding the Chessboard 守卫棋盘(迭代加深+剪枝)

    暴力,和八皇后很像,用表示i+j和i-j标记主对角线,但是还是要加一些的剪枝的. 1.最裸的暴搜 6.420s,差点超时 2.之前位置放过的就没必要在放了,每次从上一次放的位置开始放 0.400s # ...

  8. overloading and overriding

    What is the difference between method overloading and method overriding in Java? Differences between ...

  9. equals和HashCode的羁绊

    equals和hashcode我一直没弄明白到底怎么回事,今天终于弄懂了. 如下图: 在Person类没有重写equals和hashcode方法时,是如下情况: 但是当我重写了equals方法时,是如 ...

  10. 修改Windows默认调试器

    程序崩溃时,系统会弹窗让你选择是否进行调试,可以设置系统默认调试器. 注册表位置: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVe ...