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 ...
随机推荐
- Python:从入门到实践--第八章-函数-练习
#.消息:编写一个名为display_message()的函数,它打印一个句子,指出你在本章学的是什么. #调用这个函数,确认显示的消息无误 def display_message(name): pr ...
- java语言入门
Java语言的介绍: Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言. 它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机.电话.闹钟.烤面包机等家用电器的控 ...
- mysql执行sql脚本文件
mysql执行sql脚本文件 方法一:使用cmd命令执行(windows下,unix或Linux在的其控制台下) [MySQL的bin目录]\mysql –u用户名 –p密码 –D数据库<[sq ...
- 将jar包安装到本地repository中
mvn install:install-file -Dfile=G:/lcn_springboot2.0/tx-plugins-db-4.1.2.jar -DgroupId=com.codingapi ...
- ASP.NET+MVC+EntityFramework快速实现增删改查
本教程已经录制视频,欢迎大家观看我在CSDN学院录制的课程:http://edu.csdn.net/lecturer/944
- java——————基础总结2
一 程序中常见的错误: 1,语法错误 2, 逻辑错误 3,运行时错误 二 定义class类的时候,如果前面加个public 那么class的类名必须要和文件名一致,否则就会 出现编译错误 三 编译源文 ...
- ROS * 通过launch文件添加多个模型
我添加的是dae模型,urdf文件过两天贴 方法一 : <launch> <!-- these are the arguments you can pass this launch ...
- Buaa菜鸡从今天好好学打码,好好学数学,好好学英语,好好打篮球,好好锻炼,好好吃饭,好好... 好好找女朋友!
新链接: https://iamparasite.github.io/
- 链表中倒数第k个节点(Java)
链表中倒数第k个节点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路:two-pointers思想,因为是单链表,没法得prevous点,直接遍历得到链表长度再重新遍历效率很低. 采用双指 ...
- Ubuntu 16.04 强制使用ipv4安装apt-get
参考文献:https://www.linuxidc.com/Linux/2015-09/123340.htm 起因:每次校园网都要自动用ipv6不知道为什么又总之链接不上,导致安装失败,有以下命令强行 ...