经典第01章(C#教程).docx

上传人:lao****ou 文档编号:79644 上传时间:2023-02-11 格式:DOCX 页数:21 大小:144.13KB
下载 相关 举报
经典第01章(C#教程).docx_第1页
第1页 / 共21页
经典第01章(C#教程).docx_第2页
第2页 / 共21页
经典第01章(C#教程).docx_第3页
第3页 / 共21页
经典第01章(C#教程).docx_第4页
第4页 / 共21页
经典第01章(C#教程).docx_第5页
第5页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《经典第01章(C#教程).docx》由会员分享,可在线阅读,更多相关《经典第01章(C#教程).docx(21页珍藏版)》请在第一文库网上搜索。

1、第1章.NET体系构造我们不能孤立地使用C#语言,而必须和.NET Framework 一起考虑。C#编译器专门用于.NET,这表示用C#编写的所有代码总是在.NET Framework中运行。对于C#语言来说,可以得出两个重要的结论: C#的构造和方法论反映了.NET根底方法论。在许多情况下,C#的特定语言功能取决于.NET的功能,或依赖于.NET基类。由于这种依赖性,在开场使用C#编程前,了解.NET的构造和方法论就非常重要了,这就是本章的目的。本章首先介绍.NET如何处理所有的代码(包括C#), 了解在.NET编译和运行代码时通常会出现什么情况。对这些内容进展概述之后,就要详细阐述Mic

2、rosoft中间语言(MicrosoftIntermediate Language, MSIL或简称为IL),所有编译好的代码都要使用这种语言。本章特别要介绍IL、通用类型系统(Common Type System, CTS)及公共语言标准(Common LanguageSpecification, CLS)如何提供语言之间的互操作性。最后解释各种语言如何使用.NET,包括VB和 C+。之后,我们将介绍.NET的其他特性,包括程序集、命名空间和.NET基类。最后本章简要探讨一下C#开发人员可以创立的应用程序类型。1.1 C#与.NET的关系c#是一种相当新的编程语言,c#的重要性表达在以下两个

3、方面:它是专门为与Microsoft的.NET Framework 一起使用而设计的。它是一种基于现代面向对象设计方法的语言,在设计它时,Microsoft还吸取了其他类似语言的经历,这些语言是近20年来面向对象规那么得到广泛应用后才开发出来的。有一个很重要的问题要弄明白:C#就其本身而言只是一种语言,尽管它是用于生成面向.NET环境的代码,但它本身不是.NET的一局部。.NET支持的一些特性,C#并不支持。而C#语言支持的另一些特性,.NET却不支持(例如运算符重载)!但是,因为C#语言是和.NET一起使用的,所以如果要使用C#高效地开发应用程序,理解Framework就非常重要,所以本章将

4、介绍.NET的内涵。1.2 公共语言运行库.NET Framework的核心是其运行库的执行环境,称为公共语言运行库(CLR)或.NET运行库。在CLR的控制下运行的代码常常称为托管代码(managed code)。但是,在CLR执行开发的源代码之前,需要编译它们(在C#中或其他语言中)。在.NET中,编译分为两个阶段:(1)把源代码编译为Microsoft中间语言(IL)。(2) CLR把IL编译为平台专用的代码。这个两阶段的编译过程非常重要,因为Microsoft中间语言(托管代码)是提供.NET的许多优点的关键。下面看看其原因。托管代码的优点Microsoft中间语言与Java字节代码共

5、享一种理念:它们都是一种低级语言,语法很简单(使用数字代码,而不是文本代码),可以非常快速地转换为内部机器码。对于代码来说,这种精心设计的通用语法,有很重要的优点。1 .平台无关性首先,这意味着包含字节代码指令的同一文件可以放在任一平台中,运行时编译过程的最后阶段可以很容易完成,这样代码就可以运行在该特定的平台上。换言之,编译为中间语言就可以获得.NET平台无关性,这与编译为Java字节代码就会得到Java平台无关性是一样的。注意.NET的平台无关性目前只是一种可能,因为在编写本书时,.NET只能用于Windows平台,但人们正在积极准备,使它可以用于其他平台(参见Mon。工程,它用于创立.N

6、ET的开放源代码的实现,参见 : go-mono /)o2 .提高性能实际上,IL比Java字节代码的作用还要大。IL总是即时编译的(称为JIT编译),而Java字节代码常常是解释性的,Java的一个缺点是,在运行应用程序时,把Java字节代码转换为内部可执行代码的过程会导致性能的损失(但在最近,Java在某些平台上能进展JIT编译)。JIT编译器并不是把整个应用程序一次编译完(这样会有很长的启动时间),而是只编译它调用的那局部代码(这是其名称由来)。代码编译过一次后,得到的内部可执行代码就存储起来,直到退出该应用程序为止,这样在下次运行这局部代码时,就不需要重新编译了。Microsoft认为

7、这个过程要比一开场就编译整个应用程序代码的效率高得多,因为任何应用程序的大局部代码实际上并不是在每次运行过程中都执行。使用JIT编译器,从来都不会编译这种代码。这解释了为什么托管IL代码的执行几乎和内部机器代码的执行速度一样快,但是并没有说明为什么Microsoft认为这会提高性能。其原因是编译过程的最后一局部是在运行时进展的,JIT编译器确切地知道程序运行在什么类型的处理器上,利用该处理器提供的任何特性或特定的机器代码指令来优化最后的可执行代码。传统的编译器会优化代码,但它们的优化过程是独立于代码所运行的特定处理器的。这是因为传统的编译器是在发布软件之前编译为内部机器可执行的代码。即编译器不

8、知道代码所运行的处理器类型,例如该处理器是x86兼容处理器或Alpha处理器,这超出了根本操作的范围。例如Visual Studio 6优化了一台一般的Penlium机器,所以它生成的代码就不能利用Pentium III处理器的硬件特性。相反,JIT编译器不仅可以进展Visual Studio 6所能完成的优化工作,还可以优化代码所运行的特定处理器。3 .语言的互操作性使用IL不仅支持平台无关性,还支持语言的互操作性。简言之,就是能将任何一种语言编译为中间代码,编译好的代码可以与从其他语言编译过来的代码进展交互操作。那么除了 C#之外,还有什么语言可以通过.NET进展交互操作呢?下面就简要讨论

9、其他常见语言如何与.NET交互操作。(1) VB.NETVisual Basic 6在升级到Visual Basic .NET时,经历了一番脱胎换骨的变化。Visual Basic是在最近的几年中演化的,其早期版本Visual Basic 6并不适合运行.NET程序。例如,它与COM的高度集成,且只把事件处理程序作为源代码显示给开发人员,大多数后台代码不能用作源代码。另外,它不支持继承,Visual Basic使用的标准数据类型也与.NET不兼容。Visual Basic 6己经升级为Visual Basic .NET,对VB进展的改变非常大,完全可以把VisualBasic .NET当作是一

10、种新语言。现有的VB6代码不能编译为VB.NET代码,把VB6程序转换为VB.NET时,需要对代码进展大量的改动,但大多数修改工作都可以由Visual Studio .NET(VS的升级版本,用于与.NET一起使用)自动完成。如果要把一个VB6工程读取到Visual Studio .NET中,Visual Studio .NET就会升级该工程,也就是说把VB6源代码重写为VB.NET源代码。虽然这意味着其中的工作己大大减轻,但用户仍需要检查新的VB.NET代码,以确保工程仍可正确工作,因为这种转换并不十分完美。这种语言升级的一个副作用是不能再把VB.NET编译为内部可执行代码了。VB.NET只

11、编译为中间语言,就像C#一样。如果需要继续使用VB6编写程序,就可以这么做,但生成的可执行代码会完全忽略.NET Framework,如果继续把Visual Studio作为开发环境,就需要安装Visual Studio 6。(2) Visual C+ .NETVisual C+6有许多Microsoft对 Windows的特定扩展。通过Visual C+.NET,又参加了更多的扩展内容,来支持.NET Framework。现有的C+源代码会继续编译为内部可执行代码,不会有修改,但它会独立于.NET运行库运行。如果要让C+代码在.NET Framework中运行,就要在代码的开头添加下述命令:

12、#using 还要把标记/clr传递给编译器,编译器假定要编译托管代码,因此会生成中间语言,而不是内部机器码。C+的一个有趣的问题是在编译托管代码时,编译器可以生成包含内嵌本机可执行代码的这表示在C+代码中可以把托管类型和非托管类型合并起来,因此托管C+代码:class MyClass定义了一个普通的C+类,而代码:_gc class MyClass生成了一个托管类,就好似使用C#或VB.NET编写类一样。实际上,托管C+比C#更优越的一点是可以在托管C+代码中调用非托管C+类,而不必采用COM交互功能。如果在托管类型上试图使用.NET不支持的特性(例如,模板或类的多继承),编译器就会出现一个

13、错误。另外,在使用托管类时,还需要使用非标准的C+特性(例如上述代码中的_gc关键字)。因为C+允许低级指针操作,C+编译器不能生成可以通过CLR内存类型平安测试的代码。如果CLR把代码标识为内存类型平安是非常重要的,就需要用其他一些语言编写源代码,例如C# 或 VB.NETo(3) Visual J#最新添加的语言是Visual J#。在.NET Framework 1.1版本推出之前,用户必须下载相应的软件,才能使用J#o现在J#语言内置于.NET Framework中。因此,J#用户可以利用VisualStudio .NET的所有常见特性。Microsoft希望大多数J+用户认为他们在使

14、用.NET时,将很容易使用J#。J#不使用Java运行库,而是使用与其他.NET兼容语言一样的基类库。这说明,与C#和VB.NET一样,可以使用J#创立ASP.NET Web应用程序、Windows窗体、XML Web效劳和其他应用程序。(4)脚本语言脚本语言仍在使用之中,但由于.NET的推出,一般认为它们的重要性在降低。另一方面,JScript 升级到 JScript.NETo ASP.NET 页面可以用 JScript.NET 编写,现在可以把 JScript.NET当作一种编译语言来运行,而不是解释性的语言,也可以编写输入量比较大的JScript.NET代码。有了 ASP.NET后,就没

15、有必要在效劳器端的Web页面上使用脚本语言了,但VBA仍用作Office文档和Visual Studio宏语言。(5) COM 和 COM+从技术上讲,COM和COM+并不是面向.NET的技术,因为基于它们的组件不能编译为IL(但如果原来的COM组件是用C+编写的,使用托管C+,在某种程度上可以这么做)。但是,COM+仍然是一个重要的工具,因为其特性没有在.NET中完全实现。另外,COM组件仍可以使用.NET组合了 COM的互操作性,从而使托管代码可以调用COM组件,COM组件也可以调用托管代码(见第29章)。在大多数情况中,把新组件编写为.NET组件,其多数目的是为了比较方便,因为这样可以利用.NET基类和托管代码的其他优点。1.3中间语言通过前面的学习,我们理解了中间语言显然在.NET Framework中有非常重要的作用。C#开发人员应明白,C#代码在执行前要编译为中间语言(实际上,C#编译器仅编译为托管代码),这是有意义的,现在应详细讨论一下IL的主要特征,因为面向.NET的所有语言在逻辑上都需要支持IL的主要特征。下面就是中间语言的主要特征: 面向对象和使

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服