C# in Depth-剖析.NET 平台

1.7 剖析.NET 平台

最开始引入时,.NET这个词涵义甚广,用来包罗微软公司的多种技术。例如,Windows LiveID曾被叫做.NET Passport,虽然它和目前的.NET没有任何明显的联系。

幸好,这个混乱的局面逐渐平息下来了。本节要探讨.NET的各个组成部分。本书会提到3种不同的特性:

①C#语言本身的特性

②运行时的特性

③.NET框架库的特性

本书重点是在C#语言上。通常只有在与C#本身的特性有关时,才会解释运行时和框架的特性。

但是,只有在你清楚地理解了三者的差异之后,才能真正理解这些特性。

特性经常会发生重叠,但重要的是理解其中的基本原理。


1.7.1 C#语言

C#规范定义了C#

C#语言是由它的规范定义的。C#规范描述了C#源代码的格式,其中包括语法和行为。

规范中并没有描述编译器输出要在什么平台上运行,只描述了两者进行交互的要点。

例如,C#语言需要一个名为 System.IDisposable 的类型,其中包含一个名为 Dispose 的方法。它们是定义using 语句所必需的。

同样,平台需要(不管以什么样的形式)同时支持值类型和引用类型,另外还要支持垃圾回收。

C#理论上可以编译其他平台

理论上,任何平台只要支持要求的特性,C#编译器就可以以它为目标平台。

例如,C#编译器除了可以以IL(Intermediate Language,中间语言,是本书写作期间最常见的一种输出形式)形式输出外,还可以以其他合法形式输出。

运行时完全可以对C#编译器的输出进行解释,或将其直接完全转换为本地代码(native code),而不必非要对它进行JIT编译。尽管这些情况比较少见,但它们确实存在。


1.7.2 运行时

.NET平台的运行时部分是数量相当少的一些代码,它们负责确保用IL写的程序以符合CLI规范的方式执行。

CLI的运行时部分称为CLR(公共语言运行时)。以后提到CLR时,是指微软实现的CLR。

语言的一些元素永远不会在运行时的级别上出现,但也有一些元素越过了这个界线。

例如,枚举器就不是在运行时的级别上定义的。

相比之下,虽然数组和委托对IDisposable 接口来说没有任何特别的含义,但它们对于“运行时”来说都是十分重要的。


1.7.3 框架库

库提供了可供我们在程序中使用的代码

.NET中的框架库主要是以IL的形式构建的,只有在必要时才使用本地代码。

这是运行时优势的一个体现:你自己写的代码并非天生就是“二等公民”——它完全能够提供与它利用的库一样强大的功能和性能。

库中的代码量要比运行时的代码量多得多,这跟车和引擎的关系是一样的。

.NET标准库

.NET库得到了部分标准化。CLI规范提供了大量不同的概要协议和核心内容库。

规范包含两个部分:

①对库的常规文字描述,包括哪些配置文件中包括哪些库。

②以XML格式描述了库本身的细节。这是在C#中使用XML注释时生成的相同形式的文档。

.NET非标准库

.NET中有许多东西都不是基本库定义的。

如果写一个程序,在其中只使用来自规范定义的库,而且以正确的方式使用它们,那么代码应该能在任何实现(包括Mono、.NET等)上顺利地运行。

但在实际应用中,几乎任意规模的任意程序都会使用非标准的库,如Windows Forms或ASP.NET。

Mono项目也有它自己的、不是.NET一部分的库,如GTK#。另外,它也实现了许多非标准的库。

.NET是微软公司提供的运行时和库的组合

.NET一词是指微软公司提供的运行时和库的组合,其中也包含C#和VB.NET编译器。

可以把它视为在Windows顶部构建的一个完整的开发平台。

转载于:https://www.cnblogs.com/errornull/p/10019168.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值