.NET平台在分布式环境下开发应用程序,给予开放互联网标准和协议之上,实现异质语言和平台高度交互性而构建的新一代计算和通信平台.主要由三部分组成:.NET框架、Web服务和.NET企业服务器。
.NET框架由两个主要组建:公共语言运行库和.NET框架类库。
公共语言运行库是.NET框架的基础。可以将运行库看做一个在执行时管理代码的代理,他提供核心服务(如内存管理、线程管理和远程管理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。
.NET框架的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,利用它可以开发包含从传统的命令行或图形用户界面(GUI)应用程序到基于ASP.NET所提供的最新的应用程序在内的应用程序。
.NET框架可由非托管组件承载,这些组件将公共语言运行库加载到它们的进程中并启动托管代码的执行,从而创建一个可以同时利用托管和非托管功能的软件环境。
公共语言运行库管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务。这些功能是在公共语言运行库上运行的托管代码所固有的。安全性,取决于包括托管组件的来源在内的一些因素,托管组件被赋予不同程度的信任。运行库强制实施代码访问安全。运行库还通过实现称为通用类型系统(CTS)的严格的类型验证和代码验证基础结构来加强代码可靠性。CTS确保所有托管代码都是可以自我描述的。
公共语言运行库
元数据:描述代码中的类型,包括每种类型的定义、每种类型的成员的签名、代码引用的成员和运行库在执行时使用的其他数据。
MSIL和元数据包含在一个可移植可执行(PE)文件中,此文件基于并扩展过去用于可执行内容的已公布的Microsoft PE和公共对象文件格式(COFF)。这种文件格式支持MSIL或本机代码以及元数据。
元数据与代码一起存储;是一种二进制信息。
元数据以非特定语言的方式描述在代码中定义的每一个类型和成员。元数据存储以下信息:
1程序集的说明
l 标识(名称、版本、区域性、公钥)
l 导出的类型
l 该程序集所依赖的其他程序集
l 运行所需要的安全权限
2类型的说明
l 名称、可见性、基类和实现的接口
l 成员(方法、字段、属性、事件、嵌套的类型)
3 属性
l 修饰类型和成员的其他说明性元素
每个可加载的公共语言运行库可移植可执行文件都包含元数据。
当执行代码时,运行库将元数据加载到内存中,并引用它来发现有关代码的类、成员、继承等信息。
运行库使用元数据查找和加载类、在内存中对实例进行布局、解析方法调用、生成本机代码、强制安全性以及设置运行时上下文边界。
托管数据:在生存期运行库自动处理对象布局和管理对对象的引用
通用类型系统
类型系统定义了如何在运行库中声明、使用和管理类型,同时也是运行库支持跨语言集成的一个重要组成部分。通用类型系统执行以下功能:
l 建立一个支持跨语言集成、类型安全和高性能代码执行的框架
l 提供一个支持完整实现多种编程语言的面向对象的模型
l 定义各种语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用
值类型:直接包含它们的数据,值类型的实例要么在堆栈上,要么内联在结构中
.NET框架中使用的类型成员
成员 |
说明 |
事件 |
定义可以响应的事件,并定义订阅、取消订阅及引发事件的方法。事件通常用于通知其他类型的状态改变 |
字段 |
描述并包含类型状态的一部分。字段可以是运行库支持的任何类型 |
嵌套类型 |
在封闭类型范围内定义类型 |
方法 |
描述可用于类型的操作。方法的签名指定其所有参数和返回值的允许类型 构造函数是一种特殊类型的方法,可以创建类型的新实例 |
属性 |
命名类型的值或状态,并定义获得或设置属性值的方法。属性可以是基元类型、基元类型的集合、用户定义的类型或用户定义类型的集合。属性通常用于使类型的公共接口独立于类型的实际表示形式 |
通用类型系统允许类型成员具有的特征
特征 |
可应用到 |
说明 |
Abstract |
方法、属性和事件 |
类型不提供方法的实现。继承抽象方法的类型和用抽象方法实现接口的类型必须提供方法的实现。只有当派生的类型本身是抽象类型的时候,情况例外。所有的抽象方法都是虚的 |
Private |
所有 |
只能作为成员在同一类型内访问,或者在嵌套类型内访问 |
Family |
所有 |
作为成员在同一类型内访问,以及从继承的派生类型访问 |
Assembly |
所有 |
只能在定义该类型的程序集中访问 |
Family and assembly |
所有 |
只能从同时具备族和程序集访问权的类型进行访问 |
Family or assembly |
所有 |
只能从具备族和程序集访问权的类型进行访问 |
Public |
所有 |
可从任何类型访问 |
Final |
方法、属性和事件 |
虚方法不能在派生类型中被重写 |
Initialize-only |
字段 |
该值只能被初始化,不能在初始化之后写入 |
Instance |
字段、方法、属性和事件 |
如果成员未标记为static(C#和C++)、Shared(VB)、virtual(C#和C++)或Overrridable(VB),哪么它是一个实例成员(没有任何实例关键字)。内存中这些成员的副本数将会与使用它们的对象数一样多 |
Literal |
字段 |
分配给该字段的值是一个内置值类型的固定值(在编译时已知)。文本字段有时指的是常数 |