zoukankan      html  css  js  c++  java
  • 反射学习 :反射程序集

    通过放射,可以在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。如果获得了构造函数的信息,即可直接创建对象,即使这个对象的类型在编译时还不知道。

    反射程序集 :Assembly

    .Net中,程序集是进行部署、版本控制的基本单位,它包含了相关的模块和类型,同时也包含了描述这些类型的元数据。在System.Reflection命名空间下有一个Assembly类型,它代表了一个程序集,并包含了关于程序集的信息。

    加载程序的方法主要有下面的几种方法:隐式加载、Assembly.Load 、Assembly.LoadFrom  、Assembly.LoadFile 、Assembly.LoadWithPartialName。

    隐式加载:被引用的程序集,CLR会按照全局程序集缓存GAC)、工作目录(应用程序所在目录)以及私有路径目录的顺序来寻找并加载。

    Assembly.Load:通过接受一个程序集标识来加载程序集.

     a)强命名程序集:该标识包括程序集名称、版本、语言文化、以及公有密钥标记,Load方法将导致CLR按照隐式加载的策略寻找并加载程序集。

     b)弱类型程序集:只是一个不带文件扩展名的程序集的名称,CLR不会到GAC中查找,如果没有指定私有目录,则在工作目录查找,如Assembly.Load("Math")。其中私有目录的定义可以在配置文件中指定。

    Assembly.LoadFrom:当将一个程序集添加到项目引用中以后,可以直接写文件名.dll”。如果想加载一个不属于当前项目的程序集,则需要给出全路径。所以参数是包括程序集清单的文件的名称或路径,包括文件扩展名.

    与load相比:加载一个在非工作目录下的程序集后,在另一个程序集中使用这个程序集中的对象进行反序列化时失败。使用Assembly.Load方法或者将该程序集放在工作目录下后问题得以解决。 

    Assembly.LoadFile方法

    用来加载指定路径上的程序集文件的内容。使用LoadFile方法来加载和检查具有相同标识但位于不同路径中的程序集。与LoadFrom不同,LoadFile不会将文件加载到LoadFrom上下文中,也不会使用加载路径解析依赖项。LoadFile在这个受限制的方案中很有用,因为 LoadFrom不能用于加载标识相同但路径不同的程序集;它只加载第一个这样的程序集。 

    Assembly.LoadWithPartialName:

    使用部分名称从应用程序目录或从全局程序集缓存加载程序集。参数为程序集标识,其中包含程序集的名称(不带文件扩展名)。程序集的版本、语言文化及公用密钥标记为可选。

    该方法执行时,CLR首先检查应用程序的XML配置文件来搜索qualifyAssembly元素,若存在则该元素应能告诉CLR如何将一个部分的程序集标识映射为完全限定的标识,CRL将根据通常规则来查找程序集。

    若该元素不存在,CRL将使用指定名称在应用程序的工作目录和私有路径目录中搜索。若仍未找到,则到GAC中查找。 


    使用Assembly类型的静态方法 GetExecutingAssembly:获得当前程序集,它返回包含当前执行的代码的程序集(也就是当前程序集) 




  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 数的统计
    Java实现 蓝桥杯VIP 算法训练 和为T
    Java实现 蓝桥杯VIP 算法训练 友好数
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 暗恋
    Java实现 蓝桥杯VIP 算法训练 暗恋
    测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留
    RichEdit 各个版本介绍
  • 原文地址:https://www.cnblogs.com/roamman/p/1459734.html
Copyright © 2011-2022 走看看