你的位置:首页 > 软件开发 > ASP.net > 【C#进阶系列】23 程序集加载和反射

【C#进阶系列】23 程序集加载和反射

发布时间:2016-04-22 00:00:15
程序集加载程序集加载,CLR使用System.Reflection.Assembly.Load静态方法,当然这个方法我们自己也可以显式调用。还有一个Assembly.LoadFrom方法加载指定路径名的程序集,实际上其内部是先通过AssemblyName.GetAssemblyN ...

程序集加载

程序集加载,CLR使用System.Reflection.Assembly.Load静态方法,当然这个方法我们自己也可以显式调用。

还有一个Assembly.LoadFrom方法加载指定路径名的程序集,实际上其内部是先通过AssemblyName.GetAssemblyName获取AssemblyName对象,然后调用Assembly.Load方法。

此时load方**在各个位置(前面03章讲过)查找程序集,如果已经加载了此程序集就返回已加载的程序集,如果没有加载就去加载找到的程序集,如果没有找到,就加载路径所给的那个程序集。(所以很清楚了解到不一定会加载所指定的那个程序集,而可能是另一个。在这里如果每次生成强命名程序集时更新版本号,才会使LoadFrom方法的行为符合预期)

LoadFrom方法允许传递一个Url作为实参,CLR会下载文件,把它安装到用户的下载缓存中,再从那儿加载文件。

ReflectionOnlyLoadFrom函数也可以加载程序集,且禁止程序集中的任何代码执行。

使用反射构建动态可扩展应用程序

既然加载了程序集,那么就应该要有办法去使用程序集中定义的类,这种办法就是反射。

利用System.Reflection命名空间中包含的类型,可以写代码来反射元数据表,为所加载的程序集中所包含的元数据提供对象模型。

反射一些例子:

首先先建立一个用于反射的程序集,代码如下:

namespace HelloWorld{  public class Man  {    public get='_blank'>string _name;    public Man(String name) {      this._name = name;    }    public void ShowName() {      Console.WriteLine(this._name);    }  }}namespace HelloWorld{  public class Troy:Man  {    private string _jobName;     public Troy(string name,string jobName):base(name) {      this._jobName = jobName;    }    public void ShowJobName() {      Console.WriteLine(this._jobName);    }   }}

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:【C#进阶系列】23 程序集加载和反射

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录