C# 反射基础

点击查看原图


1、应用程序域

.NET Framework 在托管进程和托管线程直接增加了一个中间层次,称为"应用程序域(Application Domain)"。一个托管进程内可以容纳多个应用程序域,这些应用程序域直接是相互独立的,一个程序域中的代码不能直接访问另一个程序域中的对象,相应的,一个应用程序域中出现的异常也不会影响到其他应用程序域。

应用程序域可以看出是类型的容器。同一个类型若被加载到不同的应用程序域中就称为各自独立的客体,这些类在各自所处的程序域中所创建的对象是相互独立的,连类的静态数据也不会共享。

应用程序域的引入提高了.NET程序的健壮性。

应用程序域另一个很重要的特征,能够在不停止整个进程的情况下卸载某个应用程序域。

.NET Framework使用AppDomain类来表示应用程序域。调用它的CreateDomain方法来创建用于运行用户代码的应用程序域,调用它的Unload方法卸载一个应用程序域。

一个应用程序域可以拥有多个线程,一个线程也可以属于多个应用程序域。但是在任何时候,一个线程都只能在一个应用程序域中运行。

使用Thread类的GetDomain方法可以获取当前线程正在其中运行的"当前"应用程序域。

每个应用程序域都可以使用Load方法装入多个程序集

应用程序域非常适合需要代码隔离的场合。比如IIS、插件系统(Photoshop的滤镜插件)

2、.NET程序集的层次结构

C# 程序由一个或多个源文件组成。每个程序集都由一个或多个模块组成,模块包含IL指令和资源,但不包含程序集清单,以exe或dll文件存在。

3、获取程序集对象的引用

①获取特定类型所在的程序集引用

Assembly.GetAssembly(typeof(ClassName))

typeof(ClassName).Assembly

②获取包含了当前正在执行的代码的程序集引用

Assembly.GetExecutingAssembly()

③获取调用者代码所在程序集的引用

Assmbly.GetCallingAssembly()

④获取入口程序集引用

Assembly.GetEntryAssembly()

知识共享许可协议
《C# 反射基础》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
相邻依据:发表时间
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     163.86ms