C#高级编程之 .NET体系结构
 

2009-07-17 来源:网络

 

MSIL (Microsoft Intermediate Language)Microsoft 中间语言

CTS (Common Type System)通用类型系统

CLS (Common Language Specification)公共语言规范

1.C#与.NET关系:C#是一种基于现代面向对象设计方法专门于Microsoft的.NET Framework平台一起使用而设计的语言。

2.公共语言运行库:CLR或.NET运行库

托管代码(Managed Code):CLR控制下运行的代码(低级语言)

.NET编译两步骤:(1)把源代码编译为MSIL (2)CLR把MSIL编译为平台专用代码

3.托管代码优点:a.平台无关性 b.提高性能(JIT编译器:一次编译多次执行)c.语言互操作性(VB\C++\J#\JScript\COM、COM+)

4.MSIL主要特征:(1)面向对象和使用接口(2)值类型和引用类型差别(3)强数据类型(4)使用异常处理错误(5)使用特性attribute

(1)面向对象和使用接口:语言必须与编程方法兼容,传统面向对象的编程带有类的单一继承性。VS2005 IDE提供了在调试器上解决语言互操作性的工具(一种语言编写类与另一种语言编写类通信),而非CLR提供。

(2)相异值类型和引用类型:值类型变量直接保存其数据,引用类型变量仅保存地址,而对应数据在该地址中。

(3)数据存储规范:引用类型实例总存储在一个名为托管堆的内存区域中,值类型存储在堆栈中(例外:若值类型在引用类型中声明为字段,则他们内联存储在堆中)

强数据类型:最初会降低性能,但依赖类型安全的服务优点:语言互操作性,垃圾收集,安全性,应用程序域。

通用类型系统[CTS]:

Type(任何类型的基类)->Value Type(值类型的基类)->Reference Type(引用类型基类)

Value Type ->Built-in Value Types(内置值类型)、Enumerations(枚举类型)、User-defined Value Types(用户定义值类型)

Reference Type ->Interface Types(接口)、Point Types(指针)、Self-describing Types(自我描述类型):Class Types(类类型)、Arrarys(数组类型)

Class Types(类类型)-> Delegates(委托)、User-definedReference Types(用户定义引用类型) 、Boxed Value Types(装箱值类型)

公共语言规范[CLS]:最低标准集,所有面向.net编译器都必须支持它,它和CTS一起确保语言互操作性。

a.垃圾收集:手工方式使应用程序完成工作、对象维护引用计数(COM对象技术),垃圾收集器是一个程序,用来清理内存,方法是将所有动态请求的内存都分配到堆上,当.net检测到给定程序的托管堆已满,需要清理时就调用垃圾收集器。不能和非托管堆诸如C++这样的语言一起使用,C++允许指针自由的转换数据类型。

b.安全性:.net基于代码的安全性,而Windows是基于角色的安全性。中间语言提供了强大的类型安全性,CLR在运行代码前可以检查确定是否有需要的安全权限。

c.应用程序域:减少运行应用程序系统开销,与其他程序分离开来,但同时还需彼此通信。例如:Web服务器应用程序,它需要同时响应许多浏览器请求。进程不能直接访问物理内存,而通过指定虚拟内存中的一个地址来访问内存。每个进程有自己的安全标识,明确表示Windows允许该进程可以执行的操作。应用程序域把任何一个进程分解到多个应用程序域中,每个应用程序域对应大致对应一个应用程序,执行的每个线程都运行在一个具体的应用程序域中。

(4)通过异常方法处理错误:

C#使用try{} Catch{} finally{}代码块来处理异常。.net提供了一种基础结构,让面向.net的编译器支持异常处理,而语言无关性没有体现在C++,JAVA的异常处理中(COM的错误处理机制中有一定体现),但总体上,不同的语言处理异常的方式是一样的。

(5)特性的使用:

attribute是使用C++编写COM组件很熟悉的一个功能(COM IDL接口定义语言)。在程序中提供与某些项相关的额外信息,以供编译器使用。.NET支持特性,C++,C#,VB2005也支持特性。特性可以在一种语言的源代码中定义,而被另一种语言编写的代码读取,体现了.NET的语言无关性。建立文档说明书,也可以和反射技术一起使用,根据特性执行编程任务。

5.程序集(assembly):包含编译好的、面向.NET Framework的代码逻辑单元。完全自我描述性,是逻辑单元而不是物理单元,可存储在多个文件中(注:动态程序集dll存储在内存中),其中包含一个入口点的主文件,它描述了程序集中的其他文件。可执行代码和库代码采用相同的程序集结构,唯一区别:可执行程序集包含一个主程序入口点,而库程序集不包含。所有的元数据都与程序的可执行指令存储在一起,不会发生信息不同步的情况。程序集有两种类型:共享程序集、私有程序集。

(1)私有程序集:附带在某些软件上,只能用于该软件中。系统可以保证私有程序集不被其他软件使用,因为应用程序只能加载位于主执行文件所在文件夹或其子文件夹的程序集。私有程序集只能用于自己的软件包,无需采取安全措施,同名名称也不会有冲突,因为给定的应用程序只能使用私有程序集的名称。0影响安装。

(2)共享程序集:其他应用程序可以使用的公共库,需要采取保护防范措施如下:防止名称冲突、程序集被同一个程序集的不同版本覆盖,新版本与某些已有的客户机代码不兼容。以上问题的解决,只需要将共享程序集放在文件系统的一个特定的子目录树中,称为全局程序集高速缓存(GAC).此过程由许多.NET工具来完成,其中包含对程序集的检查、在GAC中设置小的文件夹层次结构,以确保程序集的完整性。

6.反射:程序集存储了元数据,包括在程序集中定义的所有类型和这些类型的成员的细节,所以可以编程访问这些元数据,该技术称为反射。应用:用于获取特性的详细信息,作为实例化类或调用方法的一种间接方式,如果把方法上的类名指定为字符串,就可以选择类来实例化方法,以便在运行时调用,例如根据用户的输入来调用(动态绑定)。

7.NET Framework类

.NET基类的新增内容:VB和Java库的易用性和Windows API函数的丰富功能结合起来。但Windows仍有很多功能不能通过基类来使用,而需要调用API函数(较复杂的特性),一般来说,.NET提供了所谓“平台调用”来确保对数据类型的正确转换。

.NET基类(c#编写)包括:(1)IL提供的核心功能,通用类型系统中的基本数据类型。(2)Windows GUI支持和控件(3)Web窗体(asp.net)(4)数据访问(ado.net)(5)目录访问(6)文件系统和注册表访问(7)网络和Web浏览(8).net特性和反射(9)访问Windows操作系统各个方面 (10)COM互操作性

8.用C#创建的.NET应用程序:

(1)ASP.NET应用程序:创建带有动态内容的Web页面的一种Microsoft技术。ASP页面基本是一个嵌有VBScript或JavaScript代码块的HTML文件。当客户浏览器请求一个ASP页面时,Web服务器就会发送页面的HTML部分,并处理服务器端脚本,这些脚本通常会查询数据库的数据,在HTML中标记数据。ASP有缺点:处理速度慢,服务器端代码是解释性的而非编译性的,非结构化难维护,代码会和HTML混在一起;开发困难,不支持错误处理和语法检查。ASP.NET是修改版本的结构化程序,但并没有替代ASP,而是可以与原来的ASP应用程序在同一服务器上同时并存。ASP.NET优点:在VS2005中创建它们,可以创建ASP.NET页面使用的业务逻辑和数据访问组件;后台编码允许进一步采用结构化的方式。方法:将页面服务器端功能单独放在一个类中,将该类编译为DLL文件,并把该DLL放在HTML部分下面的一个目录中。放在页面顶部的后台编码指令将把该文件与DLL关联起来。当浏览器请求该页面时,Web服务器就会在页面后台DLL中引发类中的事件;页面请求是编译后高速缓存的页面,执行速度更快;易于编写通过浏览器显示的窗体页面,但运行在非常多不同机器上较难维护,人们就会更多依赖基于窗体的应用程序。

Web窗体:将Web服务器控件从工具箱拖放到窗体上,编写窗体代码和控件事件处理程序。

Web服务器控件:XML标记,当请求一个页面时,Web浏览器会动态的把他们转换为HTML和客户端脚本。System.Web.UI.WebControls.WebControl类。

XML Web服务:计算机给Web上的其他计算机以XML格式显示信息的一种便利方式。它是为面向Web的服务而设计的,即远程计算机彼此提供可以分析或重新格式化的动态信息,最后显示给用户。技术上,返回XML形式而非HTML形式ASP.NET页面,这种页面有后台编码的DLL,包含了派生自WebService类的类。公司依赖XML Web的两个原因:a.依赖现有网络HTTP,将它用作传输信息的媒介;b.XML数据格式是自我描述,非专业,独立于平台的。

(2)Windows窗体(WinForm):将Windows控件从工具箱拖放到Windows窗体上,编写窗体代码和控件事件处理程序。Windows Form项目编译为.exe,该exe必须与.net运行库一起安装在最终用户的计算机上。

(3)Windows控件:类似于ActiveX控件。在执行该控件后,它会编译为必须安装到客户机上的DLL。.NET SDK 提供了一个实用程序,为ActiveX控件创建创建包装器。以便把他们放在Windows窗体上。派生于类System.Windows.Forms.Control.

(4)Windows服务:(最初称为NT服务)是一个在Windows NT/2000/XP/2003后台运行的程序。当希望程序连续运行,响应事件,而没有用户的明确启动操作时,就应使用Windows服务。

9.C#在企业体系结构中的作用:

C#为希望建立健全的n层客户机/服务器(C/S)应用程序的公司提供了个绝佳的机会.c#和ADO.NET合并后,可以快速而经常的访问数据库了。例如SQL Server 和Oracle数据库。C#非常适合于执行业务对象层。它为组件间的通信封装了杂乱的信息,让开发人员将注意力集中在如何将数据访问对象组合在一起,在方法中精确的强制执行公司的业务规则,而且使用特性,C#业务对象可以配备方法级的安全检查、对象池和由COM+服务提供的JIT活动。

【附图】.NET 下述特性在编译和执行过程中的作用:

  • 程序集和.net基类
  • COM组件
  • JIT编译
  • 应用程序域
  • 垃圾收集


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织