白桦的天空

第一次的心动,永远的心痛!
  首页  :: 新随笔  :: 联系 :: 管理

CLR类型将它们的程序集名/类型名对作唯一标识

Posted on 2005-04-04 09:55  白桦的天空  阅读(746)  评论(0编辑  收藏  举报
为了部署CLR模块,开发人员首先必须将其归属于一个程序集(Assembly)中。程序集就是一个或多个模块的逻辑组合。
尽管程序集可能由多个模块组成,但是一个模块往往只属于一个程序集。假如出现两个程序集都引用同一个公共模块的情况,
CLR将这个公共模块视为两个不同的模块,即公共模块中的每个类型都有两个不同的拷贝。
  在CLR中,程序集是部署的“原子”,被用来对CLR模块进行打包、加载、分发以及版本控制(物理的)。虽然程序集可能
包括多个模块以及辅助文件,但程序集本身被作为原子单元进行命名和版本化的。

  程序集规定了组件中类型定义的作用域。CLR类型将它们的程序集名/类型名对作唯一标识。
  C#  VB.NET  意义
类型  Public  Public  访问类型不受限制
Internal  Friend  类型只在程序集内部可访问
成员  Public  Public*  访问成员不受限制
Internal  Friend  成员只在程序集内部可访问
Protected  Protected  访问仅限于包含类或者包含类派生的子类型
Protected internal  Protected friend  访问仅限于包含类以及包含类派生的子类型,或者当前程序集的其它类型。
Private  Private  访问仅限于包含类型

*在VB.NET中,通过关键字DIM声明的方法默认为public,而字段默认为private。

 

程序集名字:
  每个程序集的都采用四部分(four-part)名字,作为唯一标识符。这四部分名字由名称、文化、开发人员以及组件版本构成。
这些名字被存放于程序的清单中,以及引用它的所有程序集的程序集清单中。在加载时,CLR使用四部程序集名字找到正确的组件。

  程序集的命名约定通常是基于命名空间前缀的。例如,.NET XML被部署在System.Xml程序集中,它包含的所有类型都使用System.Xml的
命名前缀。这仅仅是个约定,而不是规则。例如,类型System.Object存放在mscorlib的程序集中,而不是System的程序集中。
  程序集名字的Name属性往往与程序集清单的底层文件名(不包含任何文件扩展明,尽管它们可能有用)相对应。当构建(Build)程序集时,
名字的这个部分是由编译器根据目标文件名自动选择的。