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

  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]);}

运行结果:

fb7341ffcf3911425d38487e63357de7.png

第二步:加载程序集中类对象:并调用方法传入参数

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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团队作业

团队&组员&#xff1a; 没有组名&#xff0c;大概是因为我们组虽然有10个人&#xff0c;但是好像只起到人多的地方就容易开车搞笑&#xff0c;没有内涵&#xff0c;取出来的都是秋名山吴彦组这样的开车组名&#xff0c;在大家的的强烈建议和玩笑中&#xff0c;决定了没有组…

算法系列【希尔排序】篇

常见的内部排序算法有&#xff1a;插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括&#xff1a;关于时间复杂度&#xff1a;1. 平方阶 (O(n2)) 排序各类简单排序&#xff1a;直接插入、直接选择和冒泡排序。2. 线性对数…

sql查询索引语句_sql优化总结--基于sql语句优化和索引优化

概述最近做查询&#xff0c;统计和汇总。由于数据量比较庞大&#xff0c;大部分表数据上百万&#xff0c;甚至有的表数据上千万。所以在系统中做sql优化比较多&#xff0c;特此写一篇文章总结一下关于sql优化方面的经验。导致查询缓慢的原因1、数据量过大2、表设计不合理3、sql…

电商行业运维实践

电商行业运维实践&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;…

数据结构小总结(成都磨子桥技工学校数据结构前12题)

[pixiv] https://www.pixiv.net/member_illust.php?modemedium&illust_id34352147 暑假的作业&#xff0c;颓颓的我总算是写完了 线段树 线段树是一个高级玩意&#xff0c;不仅可以求区间和&#xff0c;区间最大等等的简单问题&#xff0c;灵活运用还有好多变种。自从学…

wav2midi 音乐旋律提取算法 附可执行demo

前面提及过&#xff0c;音频指纹算法的思路。 也梳理开源了两个比较经典的算法。 https://github.com/cpuimage/shazam https://github.com/cpuimage/AudioFingerprinter 后来一段时间&#xff0c;稍微看了下这两个算法&#xff0c;还有不少可以精简优化的空间。 例如抗噪&…

全新升级的AOP框架Dora.Interception[5]: 实现任意的拦截器注册方式

Dora.Interception提供了两种拦截器注册方式&#xff0c;一种是利用标注在目标类型、属性和方法上的InterceptorAttribute特性&#xff0c;另一种采用基于目标方法或者属性的调用表达式。通过提供的扩展点&#xff0c;我们可以任何我们希望的拦截器注册方式。目录一、IIntercep…

SCAU 算法课的题

8594 有重复元素的排列问题&#xff08;优先做&#xff09; 时间限制:1000MS 内存限制:1000K提交次数:1610 通过次数:656 题型: 编程题 语言: G;GCC;VC Description 设集合R{r1,r2,...,rn}是要进行排列的n个元素&#xff0c;其中r1,r2,...,rn可能相同。 试着设计一个算法&am…

react 数组新增_React 新特性 Hooks 讲解及实例(二)

本文是 React 新特性系列的第二篇&#xff0c;第一篇请点击这里&#xff1a;React 新特性讲解及实例什么是 HooksHook 是 React 16.8 的新增特性。它可以让你在不编写 类组件 的情况下使用 state以及其他的 React 特性。类组件的不足状态逻辑复用难缺少复用机制渲染属性和高阶组…

7天学会python_7天学会Python最佳可视化工具Seaborn(五):结构化展示多维数据

当探索具有中等数量(不多不少的意思……)维度的数据集时&#xff0c;一个很好的方式是基于不同的子数据集构建不同的实例&#xff0c;并将它们以网格的方式组织在一张图之中。这种技术有时被称为“lattice”或“trellis”(大概是格子图、网格图)&#xff0c;这跟“small multip…

面对峰值响应冲击,解决高并发的三大策略

2019独角兽企业重金招聘Python工程师标准>>> 当前在互联网的大潮下&#xff0c;众所周知淘宝、京东这些交易系统每天产生的数据量都是海量的&#xff0c;每天的交易并发也是惊人的&#xff0c;尤其是“双11”、“6.18”这些活动&#xff0c;对系统的峰值响应提出了非…

hibernate mysql 主从_MYSQL主从复制和写分离

基础篇https://edu.51cto.com/course/19845.htmlhttps://edu.51cto.com/course/19845.htmlhttps://edu.51cto.com/course/19841.htmlhttps://edu.51cto.com/course/21197.htmlhttps://edu.51cto.com/course/19886.htmlhttps://edu.51cto.com/course/19887.htmlhttps://edu.51ct…

全新升级的AOP框架Dora.Interception[6]: 框架设计和实现原理

本系列前面的五篇文章主要介绍Dora.Interception的编程模式以及对它的扩展定制&#xff0c;现在我们来聊聊它的设计和实现原理。目录一、调用链抽象二、基于约定的拦截器定义三、基于调用上下文的依赖注入容器四、拦截器的提供五、调用链的构建六、方法拦截的实现原理七、依赖注…

完成登录与注册页面的前端

完成登录与注册页面的HTMLCSSJS&#xff0c;其中的输入项检查包括&#xff1a; 用户名6-12位 首字母不能是数字 只能包含字母和数字 密码6-12位 注册页两次密码是否一致 JS&#xff1a; function fnLogin() {var uSer document.getElementById("user");var pAss do…

WPF效果第二百零一篇之实现合并单元格

早一段时间又一次出差青海省西宁市;回来又是总结又是各种琐事,也没顾得上去分享点东西;大周末的就在家分享一下,这二天再次基于ListBox实现的合并单元格的效果:1、ListBox嵌套ListBox的前台布局:<ListBox ItemsSource"{Binding LCPListData}" x:Name"Manufac…

ASP.NET Core中使用EasyCaching作为缓存抽象层

简介做后端开发&#xff0c;缓存应该是天天在用&#xff0c;很多时候我们的做法是写个帮助类&#xff0c;然后用到的时候调用一下。这种只适合简单层次的应用&#xff1b;一旦涉及到接口实现调整之类的&#xff0c;这种强耦合的做法很不合适。有些其他的功能又要去重复造轮子。…

visual studio开启多核编译方法

先按http://blog.csdn.net/acaiwlj/article/details/50240625的方法进行了VS多线程的启动。 原本以为按以下步骤设置就OK了&#xff0c;但是编译中无意间发些了一个warning&#xff1a;“/Gm”与多处理不兼容&#xff1b;忽略 /MP 开关&#xff01;&#xff01;&#xff01;&am…

聊聊storm nimbus的LeaderElector

为什么80%的码农都做不了架构师&#xff1f;>>> 序 本文主要研究一下storm nimbus的LeaderElector Nimbus org/apache/storm/daemon/nimbus/Nimbus.java public static void main(String[] args) throws Exception {Utils.setupDefaultUncaughtExceptionHandler();…

如果我去深圳,你会见我吗

▲图/ 深圳夜景初次见易小姐&#xff0c;还是21年的春节回老家的时候。想来20年因为疫情没有回家&#xff0c;家母几次三番电话里头表达的思念以及建议一些不靠谱的回家计划&#xff0c;着实有些不忍&#xff0c;确实有似“儿行千里母担忧”之理&#xff0c;索性拿着年假和加班…

开源轻量的 .NET 监控工具 - 看门狗

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具或组件&#xff0c;希望对您有用&#xff01;简介WatchDog 是一个使用 C# 开发的开源的轻量监控工具&#xff0c;它可以记录和查看 ASP.Net Core Web 和 WebApi 的实时消息、事件、…