C# 反射类Assembly用法举例
概述
程序运行时,通过反射可以得到其它程序集或者自己程序集代码的各种信息,包括类、函数、变量等来实例化它们,执行它们,操作它们,实际上就是获取程序在内存中的映像,然后基于这个映像进行各种操作。
Assembly介绍
Assembly类即程序集类,用来加载其他程序集,加载后可以用Type来使用其他程序集中的信息,如果想要使用其它程序集中的内容,需要先加载程序集。
加载程序集的三种方法:
①、一般用来加载同一文件下的其他程序集
Assembly assembly = Assembly.Load(“AssemblyName”);
②、一般用来加载不再同一文件下的其他程序集
Assembly assembly = Assembly.LoadFrom(“包含程序集清单的文件的名称或路径”);
Assembly assembly = Assembly.LoadFile(“要加载的文件的完全限定路径”);
使用方法:
Assembly asm = Assembly.LoadFrom("Demo.dll");//需要加后缀,可以指定路径,如:Assembly.LoadFrom(@"C:\Users\majm\source\repos\ConsoleApp29\bin\Debug\TestDll.dll");
Assembly asm = Assembly.Load("Demo");//无需加后缀,不可以指定路径,
使用Load可以加载当前程序bin目录行下的程序集或者系统程序集
定义数据模型:创建类库并生成dll
namespace TestDll
{public class Person{public Person(){Name = "zls";Age = 18;id = 20;}public Person(string name, int age){Name = name;Age = age;id = 21;}public string Name { get; set; }public int Age { get; set; }public int id;public int Score(int a, int b){return a + b;}}
}
第一步:首先加载一个指定程序集:
Assembly assembly = Assembly.LoadFrom(@"C:\Users\majm\source\repos\ConsoleApp29\bin\Debug\TestDll.dll");Type[] types = assembly.GetTypes();for (int i = 0; i < types.Length; i++){Console.WriteLine(types[i]);}
运行结果:
第二步:加载程序集中类对象:并调用方法传入参数
Type c1 = types[0];object obj = Activator.CreateInstance(c1);//调用Class1类中的Speak方法MethodInfo speak = c1.GetMethod("Score");object[] o = new Object[2] {12,13 };var result = speak.Invoke(obj, o);Console.WriteLine(result);
运行结果:25
这里还可以这样如下去创建实例:
Type c1 = types[0];Assembly asm = Assembly.GetAssembly(c1);Person person = (Person)asm.CreateInstance("TestDll.Person", true);//true:不区分大小写//调用Person1类中的Score方法MethodInfo speak = c1.GetMethod("Score");object[] o = new Object[2] {12,13 };var result = speak.Invoke(person, o);Console.WriteLine(result);
一样的效果,如果是当前程序集,可以GetExecutingAssembly获取程序集
Assembly asm = Assembly.GetExecutingAssembly();
C# 反射类Assembly用法举例相关推荐
- php 反射执行类方法,PHP的反射类ReflectionClass、ReflectionMethod使用方法
PHP的反射类ReflectionClass.ReflectionMethod使用方法 发布于 2014-08-09 13:56:19 | 2151 次阅读 | 评论: 0 | 来源: 网友投递 PH ...
- php反射类 ReflectionClass
http://blog.csdn.net/21aspnet/article/details/6952432 什么是php反射类,顾名思义,可以理解为一个类的映射. 举个例子: class fuc { ...
- php class类的用法详细总结
以下是对php中class类的用法进行了详细的总结介绍,需要的朋友可以过来参考下 一:结构和调用(实例化): class className{} ,调用:$obj = new className(); ...
- sqlite mysql php_PHP实现的简单操作SQLite数据库类与用法示例
本文实例讲述了PHP实现的简单操作SQLite数据库类与用法.分享给大家供大家参考,具体如下: SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已 ...
- php 反射对象属性,php面向对象之反射功能的用法详解
这篇文章主要介绍了php面向对象之反射功能与用法,结合实例形式简单分析了php5面向对象反射的概念及具体用法,需要的朋友可以参考下 本文实例讲述了php面向对象之反射功能与用法.分享给大家供大家参考, ...
- Class类和Object类及用法(一)
Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI. 这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确 ...
- c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- .NET框架-LINQ 9类操作符使用举例
Linq标准查询操作符 语言集查询 Ganmge hteg.ratedQuw,LINQ,集 成了C#编程语言中的查询语法 ,可 以用相同的语法访问不同的数据源. LINQ提 供了不同数据源的抽象层 , ...
- java reflections_java反射工具Reflections用法
java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中包含很多的Scann ...
最新文章
- 【独家】深度学习论文阅读路线图
- Event 系列: jquery event 源码
- 【Paper】2020_GrHDP Solution for Optimal Consensus Control of Multiagent Discrete-Time Systems
- WOC?老板让我从Word中复制出1000张图片?
- SpringBoot内置Tomcat支持多大并发量和连接数
- HTML5网页APP连接MQTT,使用js连接mqtt
- java12关键字var_Java 10:“ var”关键字
- 项目从0到1避坑指南
- spire.pdf转图片质量_工作了3年,我只服这5个高质量的办公网站,送给正在加班的你...
- xUtils 中的BitmapUtils 全面注释
- 归纳推理测试没做完_无论顺还是剖,有几件事尽量在生娃当天做完,月子期间基本没负担...
- hp笔记本如何看序列号
- C语言str函数系列
- Unity WebGL 打包il2cpp.exe did not run properly!
- JAVA计算机毕业设计校园订餐系统(附源码、数据库)
- element-ui中el-table组件的行号
- java实现冒泡排序 (2012-05-23 10:18:22)
- 什么是框架,框架的作用是什么?
- C++ 内存中堆栈讲解
- 7-3 求n以内最大的k个素数以及它们的和
热门文章
- [转载] 心目中的编程高手-----后学者以自励
- 随笔3:有调节的中介示例之 Model 1
- linux系统自动获取ip地址,Linux系统下设置静态IP或自动获取动态IP的简单方法
- 2015年可视化研究前沿动态
- php博客系统答辩ppt,基于PHP实现的WEB图片共享系统-php(开题报告+源程序+论文+答辩PPT+文献综述)...
- 苹果Mac电脑开机启动时的声音如何关闭?
- 使用晨曦记账本,记录家庭财政收支明细
- Bentley 软件公司发起 2021 基础设施数字化光辉大奖赛项目征集活动
- 单片机概述+AT89S51片内硬件结构
- 用C++写一个简单小病毒(零基础奶妈级教学,不可能学完还不懂)