程序集-湖南大学.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 如果我们在一个应用程序域中构造一个对象,然后又将该对象的引用传递给了另一个应用程序域,那么CLR必须先将该对象的字段系列化到一个内存块中,然后再将该内存块传递给另一个应用程序域,最后再执行反序列化得到新的对象,目的应用程序域将使用这个新建对象的引用,它不会访问原来应用程序域中的对象。 假设我们在一个应用程序域中创建了一个对象(其类型继承自System.MarshalByRefObject)当该对象的引用给传递给一个目的应用程序域时,CLR实际上会在目的应用程序域中创建一个代理类型的实例,目的应用程序域中的代码将使用这个代理的对象引用。原来的对象及其字段仍然驻留在原来的应用程序域中。代理对象实际上是一个封装器,它知道怎样调用原来应用程序域中的对象上的实例方法。同样,目的应用程序域不会直接访问原来应用程序域中的对象。 * 首先创建了一个新的应用程序域,然后使用了其中的类型,最后又将该应用程序域和其内存所有的程序集一起卸载掉,还演示了怎样定义一个可以跨越应用程序域边界、并通过引用的方法来进行封送处理的类型 * 首先创建了一个新的应用程序域,然后使用了其中的类型,最后又将该应用程序域和其内存所有的程序集一起卸载掉,还演示了怎样定义一个可以跨越应用程序域边界、并通过引用的方法来进行封送处理的类型 * 反射允许我们查找元数据所携带的信息,这个概念并不是新提出来的,在COM中也提供了相应的方法,这里做一简单的回顾。 Type Library 包含了大部分类型的信息,可以嵌入到组件中,也可以于组件放置在一起,可以通过ITypeLib和ITypeInfo接口来查看 Attributes 描述了方法、接口或参数的行为方式 IDispatch IDispatch叫做调度接口,为了使其它语言也可以使用COM,比如说一些脚本语言不支持指针,所以没有办法来调用Com中的虚函数,所以调度接口把每一个函数每一个属性都编上号,客户程序要调用这些函数属性的时侯就把这些编号传给IDispatch接口就行了,IDispatch再根据这些编号调用相应的函数 支持大多数的数据类型 因为COM是为多种语言使用设计的,所以它支持大多数的简单类型,但它是二进制标准的,所以对于一些复杂的类型,需要特别的处理方式 类似的,在C#中,我们应用反射,可以枚举出元数据表中包括的所有类型,对于每个类型,又可以获得它的基类型、它实现的接口、以及与其相关联的一些标记,还可以分析相关的元数据表来查询一个类型的字段,方法,属性,事件以及定制特性,这样就可以在运行时而不是编译时显式的加载程序集,构造类型实例,并调用类型上的方法实现类似于Win32中LoadLibrary功能的晚绑定(late binding),当需要修改时,可以只修改特定模块中的程序,只要接口不发生变化,主程序就不需要重新编译,相当于实现动态链接库(DLL)的功能 * 元数据(编译以后的最基本数据单元)本质上是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等,System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码 * System.Type获取类型的名称 System.Reflection.Assembly获得指定装配件的元数据,也包含执行一个装配件的方法 * 首先,从一个应用程序域出发,可以得到其内加载的所有程序集,根据程序集,又可以得到组成它所有的模块。由程序集或者模块,可以得到它里面定义的所有类型。最后根据类型,可以得到它的嵌套类型、字段、构造器、方法、属性以及事件 * 通过反射,我们获得一个类型的Type对象引用,可以创建出该类型的实例 * 在前面学习了程序集(assembly),定制属性(attribute),和本节的反射(reflect)后,看它们是怎样组织在一起应用的。 * 紫色部分为Framework * 这些新特性是怎样实现的,下面从各个组成部分来具体讲述 * 对于整个.NET框架来说,这三个概念非常重要。要实现多语言的互操作性,必须有一组各种语言都认可的基本数据类型,这样才能对私有语言进行标准化处理。CTS提供了这个概念,还提供了定义定制类的规则;CLS是确保代码可以在任何语言中访问的最小标准集合,所有用于.NET的编译器都应支持CLS。CLS构成了可以在.NET和IL中使用的功能子集,代码也可以使用CLS外部的功能。如果非CLS功能在代码所在的程序集的外部是可见的,那么这些功能就不能在某些语言中使用;CLR处于操作系统和代码之间,是整个Framework的核心,负责代码的编译、执行、管理等所有工作 * .NET分布式编程-C#篇19页 .NET框架程序设计(修订版)25页 * NET框架程序设计(修订版)26页 所有类

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档