1.动态类名,固定方法名,例如.调用不同类下边的GetById()方法:

//项目需要引用Miscorsoft.CSharp类库,否则会报错:找不到编译动态表达式所需的一个或者多个类型.
//引用这两个命名空间
using System.Dynamic;
using System.Reflection; Assembly asmb = typeof(CityScsbxxbServiceBase).Assembly; //表示调用dll(前提是项目引用该dll) CityScsbxxbServiceBase表示该dll中随便一个类名
Type type = asmb.GetType(strClassName, false);         //strClassName 表示类的名称,最好写成完整形式例如:Bobole.Service.City.CityScsbxxbServiceBase
dynamic obj1 = System.Activator.CreateInstance(type);
object entity = obj1.GetById(primaryKey);            //GetById 表示类strClassName 里边的一个方法 ,primaryKey表示该方法的参数
///下边是对象转换成xml
var ele = new XElement("table");
if (entity != null)
{
  var props = entity.GetType().GetProperties();
  foreach (var item in props) {
  ele.Add(new XElement(item.Name, item.GetValue(entity, null)));
} }

2.动态类名,动态方法(和上边一种引用一样)

根据接收不同的实体调用不同的方法:

//项目需要引用Miscorsoft.CSharp类库,否则会报错:找不到编译动态表达式所需的一个或者多个类型.
//引用这两个命名空间
using System.Dynamic;
using System.Reflection;

Assembly asmb_Service = typeof(CityScsbxxbServiceBase).Assembly;   //引用对应方法的dll
Assembly asmb_entity = typeof(CityScsbxxbBase).Assembly;        //引用实体的dll

Type type = asmb_entity.GetType(entityClassName, false);        //entityClassName为实体类的名称(命名空间+类名)
var obj1 = System.Activator.CreateInstance(type);

type = asmb_Service.GetType(ServiceClassName, false);          //ServiceClassName为对应方法的类的名称(命名空间+类名)

dynamic service = System.Activator.CreateInstance(type);
var method = type.GetMethod("Update", new Type[] { obj1.GetType() }); //Update为动态方法名称
if (method == null)
throw new Exception("未找到更新方法");
var success = method.Invoke(service, new object[] { obj1 });

C# 反射,动态类,动态方法的更多相关文章

  1. C#通过反射调用类及方法

    反射有个典型的应用,就是菜单的动态加载,原理就是通过反射调用某个窗体(类).下面演示一下通过反射调用类及方法: 1.新建一个类,命名为:ReflectionHelper,代码如下: #region 创 ...

  2. php反射获取类和方法中的注释

    通过php中的反射机制,获取该类的文档注释,再通过获取其所有的方法,获取方法的注释 所用到的主要类及其方法 ReflectionClass ReflectionClass::getDocComment ...

  3. C#动态创建和动态使用程序集、类、方法、字段等

    C#动态创建和动态使用程序集.类.方法.字段等 分类:技术交流 (3204)  (3)   首先需要知道动态创建这些类型是使用的一些什么技术呢?其实只要相关动态加载程序集呀,类呀,都是使用反射,那么动 ...

  4. C#如何通过反射调用类下的方法

    首先模拟一个mvc的项目,创建一个业务类(HomeService),在类下创建3个方法 public class HomeService { /// <summary> /// 无参方法 ...

  5. Hutool中那些常用的工具类和方法

    Hutool中那些常用的工具类和方法 Hutool是一个Java工具包,它帮助我们简化每一行代码,避免重复造轮子.如果你有需要用到某些工具方法的时候,不妨在Hutool里面找找,可能就有.本文将对Hu ...

  6. java 反射提取类信息, 动态代理 和过滤某些方法演示

    java 反射提取类信息, 动态代理 和过滤某些方法演示 package org.rui.classts.reflects; import java.lang.reflect.Constructor; ...

  7. C# 通过反射类动态调用DLL方法

    网上看了很多关于反射的思路和方法,发现这个还算不错 //使用反射方: using System; using System.Collections.Generic; using System.Linq ...

  8. Java 扫描实现 Ioc 动态注入,过滤器根据访问url调用自定义注解标记的类及其方法

    扫描实现 Ioc 动态注入 参考: http://www.private-blog.com/2017/11/16/java-%e6%89%ab%e6%8f%8f%e5%ae%9e%e7%8e%b0-i ...

  9. python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)

    介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. # coding=u ...

随机推荐

  1. 浅谈get,post,put和delete请求

    get.put.post.delete含义与区别   1.GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改.增加数据,不会影 ...

  2. Codeforces1113F. Sasha and Interesting Fact from Graph Theory(组合数学 计数 广义Cayley定理)

    题目链接:传送门 思路: 计数.树的结构和边权的计数可以分开讨论. ①假设从a到b的路径上有e条边,那么路径上就有e-1个点.构造这条路径上的点有$A_{n-2}^{e-1}$种方案: ②这条路径的权 ...

  3. sping配置头文件

    spring配置文件头部xmlns配置精髓   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <beans xmlns="http://www.s ...

  4. MySQL更新死锁问题【转,纯为学习】

    https://blog.csdn.net/a12345555555/article/details/72828366 -08-13 15:12:44 [ERROR] com.zhubajie.cou ...

  5. php 服务端允许跨域访问

    加上需要允许跨域访问,配置如下(一下配置内容前不允许有其他任何输出操作): //设置允许跨域的 请求源地址//方式一:header("Access-Control-Allow-Origin: ...

  6. Python环境os模块功能

    功能 语句 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名: os.listdir() 函数用来删除一个文件: os.remove( ...

  7. 手写SpringMVC实现

    设计自己的MVC架构 1.读取配置通过web.xml中加载我们自己写的MyDispatcherServlet和读取配置文件. 2.初始化九大组件只需实现基本的:1).加载配置文件:2).扫描用户配置包 ...

  8. Day 16 模块和包的导入

    包的认识 包通过文件夹来管理一些列功能相近的模块 包:一系列模块的集合体 重点:包中一定有一个专门来管理包中所有模块的文件 包名:存放一系列模块的文件夹名字 包名(包对象)存放的是管理模块的那个文件地 ...

  9. LOJ 2548 「JSOI2018」绝地反击 ——二分图匹配+网络流手动退流

    题目:https://loj.ac/problem/2548 如果知道正多边形的顶点,就是二分答案.二分图匹配.于是写了个暴力枚举多边形顶点的,还很愚蠢地把第一个顶点枚举到 2*pi ,其实只要 \( ...

  10. 带查询参数 可分页 的 T-SQL 语句写法

    ) DECLARE @pageindex int DECLARE @pagesize int DECLARE @classid int set @keys = '' ; ; ; with temptb ...