您的位置:首页 > 编程语言 > C#

《csharp高级编程》 学习笔记 第一章 .net 体系结构

2011-10-02 00:13 363 查看
第一章 .net 体系结构

几个概念:

1.Microsoft Intermediate Language,MSIL或简称IL。

2.Common Type System,CTS通用类型系统。

3.Common Language Specification ,CLS 公共语言规范。

4..NET Framework 一个功能非常丰富的平台,可开发、部署和执行分布式应用程序。

5..NET Framework 的核心是其运行库的执行环境,称为公共语言运行库(CLR)或.NET 运行库。

6.通常将在CLR 的控制下运行的代码称为托管代码(managed code)。

7.JIT编译,即时编译。IL总是即时编译的。

1.1 c#与.net的关系

c#语言不能孤立使用,C#编译器专门用于.NET,这表示用C#编写的所有代码总是在.NET Framework 中运行。

在许多情况下,C#的特定语言功能取决于.NET 的功能,或依赖于.NET 基类。

*:有一个很重要的问题要弄明白:C#就其本身而言只是一种语言,尽管它是用于生成面向.NET 环境的代码,但它本身不是.NET 的一部分。.NET 支持的一些特性,C#并不支持。而C#语言支持的另一些特性,.NET 却不支持(例如运算符重载)!

1.2 公共语言运行库CLR

在.net中,编译分为两个阶段:

(1)把源代码编译为IL;

(2)CLR把IL编译为平台专用的代码。

这两个编译过程非常重要,因为托管代码是提供.net的许多优点的关键。

1.2.1 平台无关性

1.2.2 提高性能

因为JIT编译器能够针对处理器的硬件特性来优化代码。

1.2.3 语言的互操作性

使用IL 不仅支持平台无关性,还支持语言的互操作性。简而言之,就是能将任何一种语言编译为中间代码,编译好的代码可以与从其他语言编译过来的代码进行交互操作。

语言互操作性的真正含义:

● 用一种语言编写的类应能继承用另一种语言编写的类。

● 一个类应能包含另一个类的实例,而不管它们是使用什么语言编写的。

● 一个对象应能直接调用用其他语言编写的另一个对象的方法。

● 对象(或对象的引用)应能在方法之间传递。

● 在不同的语言之间调用方法时,应能在调试器中调试这些方法调用,即调试不同语言编写的源代码。

1.3 中间语言IL

主要特征:

● 面向对象和使用接口

● 值类型和引用类型之间的巨大差别

对于值类型,变量直接保存其数据,而对于引用类型,变量仅保存地址,从地址再去找数据。

IL也有数据存储的规范:

引用类型的实例总是存在名为"托管堆"的内存区域中,值类型一般存储堆栈中(但如果值类型在引用类型中声明为字段,就内敛存储在堆中)。在第二章会具体讨论。

● 强数据类型

含义:所有变量都清晰地标记为属于某个特定数据类型。

特别是IL一般不允许对模糊的数据类型执行任何操作。

比如:c++中不同类型之间转换指针类型,这类提高性能但破坏类型的安全性的行为,只能在某些编译为托管代码的语言中的特殊情况下进行。

虽然这样强迫实现类型的安全性最初会降低性能。

但可以从.net提供的,依赖于类型安全的服务中获得的好处更多。这些服务包括。

a.语言的互操作性。

b.垃圾收集

c.安全性

d.应用程序域

1.语言互操作性中强数据类型的重要性

(1)通用类型系统CTS

CTS定义了可以在IL中使用的预定义数据类型,所有面向.net framework的语言都可以生成最终基于这些类型的编译代码。

在c#中,编译器将识别的每个预定义类型都映射为一个IL内置类型。

(2)公共语言规范CLS(common language specification)

和CTS一起确保语言的互操作性。

CLS是一个最低标准集,所有面向.NET的编译器都必须支持它。

注意:

编写非CLS兼容代码是完全可以接受的,只是在编写了这种代码后,就不能保证编译好的IL代码完全支持语言的互操作性。

CLS的两种工作方式:

首先是各个编译器的功能不必强大到支持.net的所有功能。

第二是提供如下保证:

如果限制类只能使用CLS兼容的特性,就要保证用其他兼容语言编写的代码可以使用这个类。(这里不是很懂)

在一般情况下,CLS对c#代码的影响不会太大,因为c#中的非CLS兼容特性非常少。

2.垃圾收集

windows平台使用两种技术来释放进程向系统动态请求的内存:

*完全以手工方式使应用程序代码完成这些工作。(c++语言的delete)

*让对象维护引用计数(这个东西在c++primer里面说过)(COM组件的方式)

.NET采用垃圾收集器。它是一个程序。

原理略。

它的一个重要方面是不确定性。

即不能保证什么时候会调用垃圾收集器。

.NET运行库决定需要它时,就调用它(除非明确调用垃圾收集器)。但可以重写这个过程,在代码中调用垃圾收集器。

3.安全性

.NET提供的安全机制是基于代码的安全性。windows仅提供基于角色的安全性,其建立在运行进程的账户的身份基础上,换而言之,就是谁拥有和运行进程。

4.应用程序域

● 使用异常来处理错误

详见第14章

● 使用特性(attribute)

详见第13章

1.4 程序集(assembly)

定义:包含编译好的,面向.NET framework的代码的逻辑单元,详细会在17章中论述。

1.5 .NET framework类

编写托管代码的最大好处是可以使用.NET基类库。

.NET基类是一个内容丰富的托管代码类集合,它可以完成以前要通过windows api来完成的绝大多数任务。

1.6 命名空间

命名空间是.NET避免类名冲突的一种方式。

命名空间不过是数据类型的一种组合方式,但命名空间中所有数据类型的名称都会自动加上该命名空间的名字作为前缀。

命名空间可以相互嵌套(例如System.Array)。

注意:

如果没有显示提供命名空间,类型就添加到一个没有名称的全局命名空间中。

1.7 用csharp创建.NET应用程序

● 创建ASP.NET应用程序

ASP(active server page)是用于创建带有动态内容的web页面的一种microsoft技术。

是客户建立基于浏览器的应用程序的一种便利方式。

● 创建windows窗体

windows form项目编译为.EXE,该EXE必须与.NET运行库一起安装在最终用户的计算机上。

第31章详细介绍。

● 使用windows presentation foundation(WPF)

这是一种很新的技术。WPF在建立应用程序时使用xaml(可扩展的应用程序标记语言)。

xaml是用于创建窗体的xml声明,它代表wpf应用程序的所有可视化部分和操作。

wpf是迈向声明性编程的一步,而声明性编程是编程业的趋势。

声明性编程是指,不是利用编译语言来创建对象,而是通过xml类型的编程来声明所有的元素。

● windows控件

web窗体和windows窗体开发方式一样,但添加的控件类型不同。

● windows服务

● windows communication foundation(WCF)

1.8 csharp在.NET企业体系结构中的作用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: