C# 反射,动态类,动态方法
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# 反射,动态类,动态方法的更多相关文章
- C#通过反射调用类及方法
反射有个典型的应用,就是菜单的动态加载,原理就是通过反射调用某个窗体(类).下面演示一下通过反射调用类及方法: 1.新建一个类,命名为:ReflectionHelper,代码如下: #region 创 ...
- php反射获取类和方法中的注释
通过php中的反射机制,获取该类的文档注释,再通过获取其所有的方法,获取方法的注释 所用到的主要类及其方法 ReflectionClass ReflectionClass::getDocComment ...
- C#动态创建和动态使用程序集、类、方法、字段等
C#动态创建和动态使用程序集.类.方法.字段等 分类:技术交流 (3204) (3) 首先需要知道动态创建这些类型是使用的一些什么技术呢?其实只要相关动态加载程序集呀,类呀,都是使用反射,那么动 ...
- C#如何通过反射调用类下的方法
首先模拟一个mvc的项目,创建一个业务类(HomeService),在类下创建3个方法 public class HomeService { /// <summary> /// 无参方法 ...
- Hutool中那些常用的工具类和方法
Hutool中那些常用的工具类和方法 Hutool是一个Java工具包,它帮助我们简化每一行代码,避免重复造轮子.如果你有需要用到某些工具方法的时候,不妨在Hutool里面找找,可能就有.本文将对Hu ...
- java 反射提取类信息, 动态代理 和过滤某些方法演示
java 反射提取类信息, 动态代理 和过滤某些方法演示 package org.rui.classts.reflects; import java.lang.reflect.Constructor; ...
- C# 通过反射类动态调用DLL方法
网上看了很多关于反射的思路和方法,发现这个还算不错 //使用反射方: using System; using System.Collections.Generic; using System.Linq ...
- 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 ...
- python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)
介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. # coding=u ...
随机推荐
- vue 基础: 组件
2.局部组件: 动态组件:
- css3实现条纹以及方格斜纹背景
CSS代码: .stripes { height: 250px; width: 375px; float: left; margin: 10px; -webkit-background-size: 5 ...
- android studio学习(一)
关于布局绝大部分使用线性布局和相对布局LinearLayout线性布局android:id 标识,找到空间"@+id/"android:layout_width 宽度android ...
- windows云服务器发布项目
1.tomcat安装版安装,把server.xml中”localhost“改为自己的域名.启动tomcat的时候就通过外网访问到云服务器的tomcat主页. 2.上述实现的前提是已经对域名进行解析:域 ...
- 2015沈阳站-Meeting 最短路
http://acm.hdu.edu.cn/showproblem.php?pid=5521 题目大意:A,B两个人分别在1和n区.给出区之间有联系的图以及到达所需时间.求两个人见面最短时间以及在哪个 ...
- 第七节《Git协议与工作协同》
Git提供了丰富的协议支持,包括:SSH.GIT.HTTPS.FTP.FTPS.RSYNC,这些协议可以分为两类:智能协议和哑协议. <1>智能协议 在会话时使用智能协议,会在会话的两个版 ...
- JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系
郭晨 软件151 1531610114 [整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 visio文件下载 概述 一个JavaEE的项 ...
- Reactor和Proactor
服务器编程框架 IO处理单元 :处理用户连接,读写网络数据:(单机) :作为接入服务器,实现负载均衡;(集群) 请求队列 :各个单元之间通信的抽象,通常被实现为池的一部分:一个单元通知另外一个单元,或 ...
- 1.1.27 word表格里的文字不显示
1.问题: 下载其他人做的表格后,在表格内打字,字不显示. 2.解决方案: 产生这种问题的原因是,该表格设置的字体,你的电脑未安装. a.将隐藏文字选中,设为[宋体]或其他已经安装字体. b.下载[方 ...
- Centos 7 安装图形化环境
安装系统时,使用了最小化安装,当需要用到图形界面的时候需要安装图形界面支持 环境是centos7.5最小化安装 1,先更新系统 yum -y upgrade 这里说明一下upgrade和update的 ...