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

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. 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party

    银牛派对 正向建图+反向建图, 两边跑dijkstra,然后将结果相加即可. 反向建图以及双向建图的做法是学习图论的必备思想. #include <iostream> #include & ...

  2. html的文档设置标记上(格式标记)4-5

    <html> <head> <title>第四课的标题及第五课的标题</title> <meta charset="utf-8" ...

  3. Python3+Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记9(发送富文本信息及上传文件处理)'''from seleni ...

  4. 【Python图像特征的音乐序列生成】数据集制作的一些tricks

    关于数据集的制作,我决定去掉很多不必要的东西,比如和弦,于是我选择了melody部分的旋律. 有了midi文件,我现在要abc序列,所以我要通过midi2abc转换一下文件. 批处理程序效果如下: 文 ...

  5. MovieReview—Coco(寻梦环游记)

    Dream & Family         The protagonist in the movie is hard to choose between family and dream. ...

  6. HDU 5091 Beam Cannon (扫描线思想)

    题意:移动一个矩形,使矩形内包含的点尽量多. 思路:把一个点拆成两个事件,一个进(权值为1)一个出(权值为-1),将所有点按照x排序,然后扫描,对于每个x,用一个滑窗计算一下最大值,再移动扫描线.树状 ...

  7. JavaScript内存泄露,闭包内存泄露如何解决

    本文原链接:https://cloud.tencent.com/developer/article/1340979 JavaScript 内存泄露的4种方式及如何避免 简介 什么是内存泄露? Java ...

  8. JS实现全排列

    https://www.jb51.net/article/39291.htm JavaScript全排列的六种算法 具体实现 算法一:交换(递归) 复制代码代码如下: <html xmlns=& ...

  9. 前端安全系列(二):如何防止CSRF攻击?

    前端安全系列(二):如何防止CSRF攻击?   背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点.在移动互联网时代,前端人员除了传统的 XS ...

  10. Ubuntu 忘记root user密码 关闭图形界面

    忘记root密码 删除recovery nomodeset 才删除的后面添加 quiet splash rw init=/bin/bash.然后按F10, 启动 忘记User密码 http://blo ...