概述

程序运行时,通过反射可以得到其它程序集或者自己程序集代码的各种信息,包括类、函数、变量等来实例化它们,执行它们,操作它们,实际上就是获取程序在内存中的映像,然后基于这个映像进行各种操作。

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");//无需加后缀,不可以指定路径,

  1. 使用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用法举例相关推荐

  1. php 反射执行类方法,PHP的反射类ReflectionClass、ReflectionMethod使用方法

    PHP的反射类ReflectionClass.ReflectionMethod使用方法 发布于 2014-08-09 13:56:19 | 2151 次阅读 | 评论: 0 | 来源: 网友投递 PH ...

  2. php反射类 ReflectionClass

    http://blog.csdn.net/21aspnet/article/details/6952432 什么是php反射类,顾名思义,可以理解为一个类的映射. 举个例子: class fuc {  ...

  3. php class类的用法详细总结

    以下是对php中class类的用法进行了详细的总结介绍,需要的朋友可以过来参考下 一:结构和调用(实例化): class className{} ,调用:$obj = new className(); ...

  4. sqlite mysql php_PHP实现的简单操作SQLite数据库类与用法示例

    本文实例讲述了PHP实现的简单操作SQLite数据库类与用法.分享给大家供大家参考,具体如下: SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已 ...

  5. php 反射对象属性,php面向对象之反射功能的用法详解

    这篇文章主要介绍了php面向对象之反射功能与用法,结合实例形式简单分析了php5面向对象反射的概念及具体用法,需要的朋友可以参考下 本文实例讲述了php面向对象之反射功能与用法.分享给大家供大家参考, ...

  6. Class类和Object类及用法(一)

    Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI. 这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确 ...

  7. c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  8. .NET框架-LINQ 9类操作符使用举例

    Linq标准查询操作符 语言集查询 Ganmge hteg.ratedQuw,LINQ,集 成了C#编程语言中的查询语法 ,可 以用相同的语法访问不同的数据源. LINQ提 供了不同数据源的抽象层 , ...

  9. java reflections_java反射工具Reflections用法

    java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中包含很多的Scann ...

最新文章

  1. 【独家】深度学习论文阅读路线图
  2. Event 系列: jquery event 源码
  3. 【Paper】2020_GrHDP Solution for Optimal Consensus Control of Multiagent Discrete-Time Systems
  4. WOC?老板让我从Word中复制出1000张图片?
  5. SpringBoot内置Tomcat支持多大并发量和连接数
  6. HTML5网页APP连接MQTT,使用js连接mqtt
  7. java12关键字var_Java 10:“ var”关键字
  8. 项目从0到1避坑指南
  9. spire.pdf转图片质量_工作了3年,我只服这5个高质量的办公网站,送给正在加班的你...
  10. xUtils 中的BitmapUtils 全面注释
  11. 归纳推理测试没做完_无论顺还是剖,有几件事尽量在生娃当天做完,月子期间基本没负担...
  12. hp笔记本如何看序列号
  13. C语言str函数系列
  14. Unity WebGL 打包il2cpp.exe did not run properly!
  15. JAVA计算机毕业设计校园订餐系统(附源码、数据库)
  16. element-ui中el-table组件的行号
  17. java实现冒泡排序 (2012-05-23 10:18:22)
  18. 什么是框架,框架的作用是什么?
  19. C++ 内存中堆栈讲解
  20. 7-3 求n以内最大的k个素数以及它们的和

热门文章

  1. [转载] 心目中的编程高手-----后学者以自励
  2. 随笔3:有调节的中介示例之 Model 1
  3. linux系统自动获取ip地址,Linux系统下设置静态IP或自动获取动态IP的简单方法
  4. 2015年可视化研究前沿动态
  5. php博客系统答辩ppt,基于PHP实现的WEB图片共享系统-php(开题报告+源程序+论文+答辩PPT+文献综述)...
  6. 苹果Mac电脑开机启动时的声音如何关闭?
  7. 使用晨曦记账本,记录家庭财政收支明细
  8. Bentley 软件公司发起 2021 基础设施数字化光辉大奖赛项目征集活动
  9. 单片机概述+AT89S51片内硬件结构
  10. 用C++写一个简单小病毒(零基础奶妈级教学,不可能学完还不懂)