反射手册笔记 4.创建对象
第一部分 动态程序集加载
1.创建程序集引用:分2种
全面引用:以引用程序集名称,版本,文化以及公钥标记的方式,进行加载——首选,避免DLL Hell。静态引用的程序总是全部引用
部分引用:只使用程序集名称,而忽略其他所有属性,进行加载。
.Net如何找到要加载的DLL:
首先,运行时要分析应用程序配置文件,包括以下3个级别:
a)应用程序配置文件: App.config
b)发布程序配置文件: 用于将以前的程序集定向到最新版本
a)机器配置文件: machine.config
接下来,检验程序集是否事先已经被绑定。如果是,就使用以前加载的程序集;否则搜索GAC,如果在GAC中找到就加载;否则搜索应用程序目录,辅助以culture,直到找到为止。
定义AssemblyName对象,以指定要加载的程序集,这个对象有4个参数:名称,版本,文化以及公钥标记。全部指定就是“全面引用”,得到唯一的Assembly;只指定一部分参数(至少要有名称),即“局部引用”,则可能返回的不是所想要的(找到了若干匹配的第一个)。
部分引用的搜索顺序:应用程序配置文件——应用程序目录——GAC,未指定版本就选择最高版本。
2.动态加载程序集
有3种方法,加载Assembly:
Assembly.Load(): 加载全面/部分引用,以AssemblyName为参数。
Assembly.LoadFrom(): 以字符串为参数,是为存放应用程序DLL文件的路径。
Assembly.LoadWithPartialName(): 以字符串为参数,且不进行应用程序配置文件查询。如"TestAssembly,version=1.0.0.1001"
3.动态实例化类:
Assembly.CreateInstance(string type)方法
第二部分讲的是反射与抽象工厂的结合——反射工厂,这部分技术在DesignPatterns中再说。
1.创建程序集引用:分2种
全面引用:以引用程序集名称,版本,文化以及公钥标记的方式,进行加载——首选,避免DLL Hell。静态引用的程序总是全部引用
部分引用:只使用程序集名称,而忽略其他所有属性,进行加载。
.Net如何找到要加载的DLL:
首先,运行时要分析应用程序配置文件,包括以下3个级别:
a)应用程序配置文件: App.config
b)发布程序配置文件: 用于将以前的程序集定向到最新版本
a)机器配置文件: machine.config
接下来,检验程序集是否事先已经被绑定。如果是,就使用以前加载的程序集;否则搜索GAC,如果在GAC中找到就加载;否则搜索应用程序目录,辅助以culture,直到找到为止。
定义AssemblyName对象,以指定要加载的程序集,这个对象有4个参数:名称,版本,文化以及公钥标记。全部指定就是“全面引用”,得到唯一的Assembly;只指定一部分参数(至少要有名称),即“局部引用”,则可能返回的不是所想要的(找到了若干匹配的第一个)。
部分引用的搜索顺序:应用程序配置文件——应用程序目录——GAC,未指定版本就选择最高版本。
2.动态加载程序集
有3种方法,加载Assembly:
Assembly.Load(): 加载全面/部分引用,以AssemblyName为参数。
Assembly.LoadFrom(): 以字符串为参数,是为存放应用程序DLL文件的路径。
Assembly.LoadWithPartialName(): 以字符串为参数,且不进行应用程序配置文件查询。如"TestAssembly,version=1.0.0.1001"
3.动态实例化类:
Assembly.CreateInstance(string type)方法
第二部分讲的是反射与抽象工厂的结合——反射工厂,这部分技术在DesignPatterns中再说。