《C#与.NET3.0高级程序设计》摘要-----第一章 .NET之道

 

第一章 .NET之道


一、.NET框架的一些核心功能

1、对已有具有完全的互操作性

    已有的COM二进制组件可以和更新的.NET二进制组件共存,反之亦然。利用平台调用(PInvoke)服务可以在.NET的代码里调用基于C的库。


2、完全的语言集成

    支持跨语言继承、跨语言异常处理和跨语言的调试。

 

3、所有支持.NET的语言共用公共运行库引擎

    这个引擎具有一组明确定义的类型,而每一种支持.NET的语言都能明白这些类型。

 

4、基类库

    这个库隐藏了原始API调用的复杂性,还提供了被所有支持.NET的语言所使用的一致的对象模型。

 

5、不关注COM底层操作

    IDL代码和VARIANT数据类型不会出现在本机.NET二进制代码中。

 

6、真正简化的部署模型

    不需要将二进制单元注册到系统注册表。允许*.dll的不同版本存在于同一台机器上。

 

二、.NET平台各模块

2.1、公共类型系统CTS

    类型:指的是集合{类,结构,接口,枚举,委托}中的任意成员。

 

   类型成员:集合{构造函数,终结器,静态构造函数,嵌套类型,运算符,方法,属性,索引器,字段,只读字段,常量,事件}中的元素之一。类型成员可有各种修饰语。CTS规范完整的描述了运行库所支持的所有可能的数据类型编程结构,指定了这些实体间如何交互,也规定了它们在.NET元数据格式中的表示。它规定了类型必须如何定义才能被CLR承载。

 

    一般来说,只有那些创建针对.NET平台的工具或编译器的人才对CTS的内部工作非常关心。

 

    上述五种类型在下文详述。

2.2、公共语言规范(CLS

    定义了一个让所有的.NET语言都支持的公共类型和编程结构的子集。它清晰的描述了支持.NET的编译器必须支持的最小的和完全的特征集,以生成可有CLR承载的代码,同时可以被基于.NET平台的其他语言用统一的方式进行访问。它可以看成由CTS定义的完整功能的一个子集。

 

    最重要的规则:CLS规则仅适用于类型中向定义它的程序集以外公开的部分。

    

   只有工具/编译器的开发人员才会对CTS和CLS规则的具体细节感兴趣。

 

    确保遵循CLS:[assembly: System.CLSCompliant (true)]。

2.3、公共语言运行库CLR

    微软实现的满足CLS规范的软件层。主要作用是为我们定位加载管理.NET类型,同时也负责大量底层细节的工作,如内存管理、安全检查等。

 

    可以理解为执行给定编译代码单元所需的外部服务的集合。

 

    CLR中最重要的部分是名为mscoree.dll的库,称为“公共对象运行库执行引擎”。当用户程序引用一个程序集,要使用它时,mscoree.dll将首先自动加载,然后由它负责将需要的程序集导入内存。运行库引擎首要的任务就是负责解析程序集的位置,并通过读取其中包含的元数据,在二进制文件中发现所请求的类型。接着,CLR在内存中为类型布局,将关联的CIL编译成特定平台的指令,执行所有需要的安全检查,然后运行当前的代码。

三、其他重要概念

3.1、基类库(BCL

     .NET平台提供的一个适用于全部.NET程序语言,封装了各种基本的类型。

 

    最重要的是mscorlib.dll。

3.2、程序集

    表现形式就是.exe或.dll,但是和传统意义上的不同。

 

   包含:IL代码类型元数据。CIL代码类似Java的字节码,只在绝对必需的时候才被编译成特定平台的指令。元数据详尽描述了二进制文件中每个“类型”的特征。

清单:程序集本身也使用元数据来进行描述,称之为“清单”。

    

    一般是单文件程序集多文件程序集中的每一个二进制文件称为一个“模块”,其中一个为主模块,除了包含自身CIL指令和各种类型元数据,还包含程序集清单,其他模块包含一个模块级的程序集清单CIL类型元数据

 

   多文件程序集的优点:为了部署的灵活性。

3.3、公共中间语言(CIL

    即时(JIT)编译器负责将CIL代码编译成机器代码,第一次使用时编译好后放在内存中,以后就不需要再次编译。

3.4、元数据

    类型元数据用来描述每一个二进制文件中定义的类型(类、结构、枚举等),以及每个类型的成员(属性、方法、事件等)。
    
    元数据不仅用于.NET运行库环境的许多方面,还用于各种开发工具中,如Visual Studio提供的IntelliSense特性就能在设计阶段读取程序集的元数据。各种对象浏览工具、调试工具以及C#编译器自身都使用元数据。需要注意的是,元数据是许多.NET技术的支柱,包括远程处理、反射、晚期绑定、XML Web服务和对象序列化。
    .NET程序集也包含描述程序集自身的元数据,称为清单。清单记录了所有确保现有程序集政策工作的外部程序集、程序集的版本号、版权信息等。

3.5、程序集/命名空间、类型的区别

    命名空间就是一个程序集内相关类型的一个分组。一个程序集可以包含任意个命名空间,每个命名空间又可以包含多种类型。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值