C#程序集相关的概念

程序集包含:类型元数据(描述在代码中定义的每一类型和成员,二进制形式)。程集元数据(程序集清单、版本号、名称等)、IL代码(这些都被装在exe或dll中)、资源文件。每个程序集都有自己的名称、版本等信息,这些信息可以通过AssemblyInfo.cs文件来自己定义。

获取一个类的类型  person p=new person();  Type  Type=p.getType();

得到一个类的类型  Type type=typeof(Person);

获取一个类型的父类   Type  type=s.GetType().BaseType;

获取Person类型的所有方法(不包括私有方法)

Person  p=new Person(); Type  personType=p.GetType();

MethodInfo[]   methods=personType.GetMethods();

foreach(var item in methods)

{

Console.Writeline(item.Name);

}

获取一个类型的属性:

PropertyInfo[]  properties=persontype.GetProperties();

遍历数组的时候返回的类型为PropertyInfo

获取一个类型的所有字段:FieldInfo[]  fields=typeof(Person).GetFiels();返回的类型为FieldInfo

获取一个类中的所有成员:MemberInfo[]  members=typePerson.GetMembers();遍历数组时返回的类型为MemberInfo;

通过反射调用方法:(定义的方法没有参数)

1.获取一个类的Type

2.获取我们要找的方法

3.创建一个该类的对象

4.调用方法

Type  person=typeof(Person);

MethodInfo  SayHi=peron.GetMethod("SayHi");

object obj=Activator.CreateInstance(person);

SayHi.Invoke(obj,null);

通过反射调用方法(定义的方法有参数)

Type  person=typeof(Person);

MethodInfo  info=person.GetMethod("Say",new Type[]{typeof(string),typeof(string)});

object obj=Activivator.CreateInstance(person);

info.Invoke(obj,new obj[]{"大家好","大坏蛋"});

调用一个带返回值的方法:

Type personType=typeof(Perosn);

MethodInfo info=personType.GetMethod("Add");//Add方法中返回的是一个int类型的方法

object obj=Activator.CreateInstance(personType);

object objreturn=info.Invoke(obj,new object[]{10,20});

动态加载程序集:

Assembly  asm=Assembly.LoadFile(@"E:\aa\程序集\程序集\ClassLibrary1\bin\Debug\ClassLibrary1.dll")

获取程序集中所有类型的Type

Type[]  types=asm.GetTypes();

获取所有类型的public 类型的Type

Assembly  adm=Assembly.LoadFile(文件的绝对路径);

Type[] publictype=adm.GetExportTypes();

获取指定的类型

Type typePerson=asm.GetType("ClassLibrary1.Person");

判断一个类型是否可以被另一个类型实例化

typePerson.IsAssignableForm(typeChinese);

考虑是一个类型是否为另一个类型的子类,返回的结果是一个bool类型

typePerson.IsSubclassOf(typeChinese)


欢迎关注我的公众号(同步更新文章)DoNet技术分享平台

阅读原文

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

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

相关文章

linux+删除乱码的文件,linux 下删除乱码文件-乾颐堂

在linux下删除文件,遇到特殊字符是一件非常头疼的事情。1. 如果文件名带 ‘-’ 或者‘--’这样的字符删除办法为:rm -- 文件名如文件名为:-pythontab.tgz如果用普通方法去删除:1rm -pythontab.tgz结果错误:rm: invalid…

程序员如何保护自己的颈椎

我们程序员天天对着电脑,眼睛,颈椎等等,都会落下不少的职业病。来说说怎么治疗自己的颈椎病。1、颈椎病是怎么产生的形成颈椎病的核心原因是:不良生活习惯我们身体的绝大部分疾病都是来自不良的生活习惯,生活习惯不改&…

如何改变XCode的默认设置

改变bundle ID 进入 /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application 目录然后进入各个子目录(Navigation-based ApplicationOpenGL ES ApplicationSplit View-based ApplicationTab Bar ApplicationUtility ApplicationView-b…

linux关机时循环输出脚本,Linux关机时执行指定脚本功能实现

1.关机时执行某个脚本的具体思路(1)在文件夹/etc/init.d/下创建关机时需要执行的脚本file_name;(2)分别在文件夹/etc/rc0.d/和/etc/rc6.d/下创建该该脚本文件的链接文件K07file_name:sudo ln -s /etc/init.d/file_name /etc/rc0.d/K07file_namesudo ln -…

URI和URL及URN的区别

对于URL,大家都比较熟悉,其他两个词就比较陌生了。URI、URL和URN是识别、定位和命名互联网上的资源的标准途径。1989年Tim Berners-Lee发明了互联网(World Wide Web)。WWW被认为是全球互连的实际的和抽象的资源的集合–它按需求提供信息实体–…

Linux基础-目录与路径

今天我们一起来认识下linux中的目录与路径及操作其的一些常用命令。 说起路径就有绝对与相对之分,虽然简单,我们还是再啰嗦一下: 绝对路径,从系统的根目录/开始的目录都是相对路径,比如/usr/bin、/usr/local 相对路径…

螺旋图形Linux,Canvas 螺旋线几何图形绘制

JavaScript语言:JaveScriptBabelCoffeeScript确定window.requestAnimFrame (function() {return window.requestAnimationFrame ||window.webkitRequestAnimationFrame ||window.mozRequestAnimationFrame ||window.oRequestAnimationFrame ||window.msRequestAnim…

28家知名IT公司名称的由来

28家IT公司名称由来,你知道吗?EMC、VMware、IBM、Oracle、NetApp、Citrix、Cisco、Google、Amazon、Alibaba、UCloud、Tencent、Baidu等著名的存储、备份或云计算行业的IT公司,相信你我都是耳熟能详,但这些公司的名称是如何而来的…

编程应该用 Mac ,还是 PC ?

爱编程,不爱修电脑;爱学习,更爱运动;爱科技,也爱娱乐;爱工作,不爱加班。爱幽默、爱生活、爱浪漫、爱打拼,我是程序员,我为自己代言,关注程序员,分…

linux创建虚拟声卡,Pear BIOS 安装和配置指引

Pear BIOS 安装指引Pear BIOS是一套硬件模拟系统,操作系统可以在这套模拟硬件上运行。Pear BIOS可以让用户同时安装多套操作系统,使用时可以选择任何一套操作系统启动。在传统电脑系统上,操作系统可以识别并必须识别硬件;而在这套…

左右值

C/C语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。左值表示存储在计算机内存的对象,而不是常量或计算的结果。或者说左值是代表一个内存地址值,并且通过这个内存地址&am…

关于 ASP.NET 内存缓存你需要知道的 10 点

缓存机制的主要目的是提高应用程序的性能。作为 ASP.NET 开发人员,你可能会意识到 ASP.NET Web 窗体以及 ASP.NET MVC 可以使用 Cache 对象缓存应用程序的数据。这通常被称为服务器端数据缓存,并且常作为框架的内置功能。虽然 ASP.NET Core 中并没有这样…

linux git删除的文件怎么还原,从Git仓库中恢复已删除的分支、文件或丢失的commit...

从Git仓库中恢复已删除的分支、文件或丢失的commit在使用Git的过程中,有时可能会有一些误操作比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支结果造成本地(远程)的分支或某些commit丢失可以通过reflog来进行恢复,前提是丢失的…

两张趣图助你理解状态码的含义~

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。我们可以通过查看HTTP状态码来判断服务器状态,常见的有404 、502等;但是其他不是很常见的状态码都代表什么状态呢?下面有两张有趣的图片…

java 自定义注解以及获得注解的值

1.自定义注解 import java.lang.annotation.*;Documented Target(ElementType.FIELD) Inherited Retention(RetentionPolicy.RUNTIME ) public interface MyAnno {/*** 是否能为null* return*/boolean isCanNull() default true;/*** 是否能为空字符串* return*/boolean isCanE…

linux列出管道,lsof列出的管道列表示什么意思?_linux_开发99编程知识库

文件不僅以流形式打開。 其中一些是在 lsof 手冊中列出的:FD is the File Descriptor number of the file or:cwd current working directory;Lnn library references (AIX);err FD information error (see NAME column);jld jail directory (FreeBSD);ltx shared l…

CSS一些实用的技巧

css 字体简写规则当使用css定义字体时你可能会这样做:font-size: 1em;line-height: 1.5em;font-weight: bold;font-style: italic;font-variant: small-caps;font-family: verdana,serif;事实上你可以简写这些属性:font: 1em/1.5em bold italic small-ca…

linux openssh升级8.1,Centos7利用rpm升级OpenSSH到openssh-8.1p1版本

由于近期安全事故频发,打算把机器OpenSSH升级到最新版本,找了一圈,发现分享的rpm包就到7.4版本,最新版已经到8.1.p1,所以博客自编译一个openssh-8.1p1的rpm包进行分享。检查环境:[roottest]# ssh -VOpenSSH…

《HTTP权威指南》 – 11.验证码和新鲜度

服务器应当告知客户端能够将内容缓存多长时间,在这个时间内就是新鲜的。服务器可以用这两个首部之一来提供信息: Expires(过期)Cache - Control(缓存控制)Expires首部 规定文档“过期”的具体时间&#xff…

产品经理必备神器推荐

欢迎关注我的公众号(同步更新文章):DoNet技术分享平台阅读原文工欲善其事,必先利其器,作为最追求极致体验的产品经理群体,手里有一件趁手的法器,工作起来才会有一种享受般的快感,最近…