第 1 章 C# 概 述 本章介绍C#语言的诞生及其相对Java、C++等语言的特征和优势,C#与.NET平台的联系,C#的编程开发环境,以及如何创建简单的C#应用程序。通过本章的学习,应完成以下学习目标: 了解C#语言的诞生 掌握C#语言的主要特征 了解并掌握C#与.NET平台的联系 掌握C#语言能够编写的应用程序类型 了解.NET Framework的工作原理 熟悉并学会定制Visual Studio 2005开发环境 学会创建简单的C#应用程序 1.1 C#与.NET平台 C#(读作C-Sharp)是Microsoft开发的一种较新的、简单、现代、面向对象、类型非常安全、派生于C和C++的编程语言,功能十分强大。C#语言及其.NET开发环境,被认为是近年来最重要的新技术,掀起了程序设计与开发的新革命。 1.1.1 为什么选择C# 从Windows 3.1到Windows Server 2003,Windows操作系统在表面看起来完全不同,但采用的都是相同的Windows API(应用程序编程接口,Application Programming Interface)。Windows的每一次升级,其API都会增添许多新的功能,第三方厂商相应地也会开发出或升级许多的Windows软件。为了使新的Windows产品兼容旧版本,Microsoft必须不断扩展其开发工具和语言,这导致它们越来越复杂。 为了便于开发人员编写更优秀的软件,同时跟上最新硬件的发展速度,迫切需要一种简单而专业化的语言、环境和开发工具,为此Microsoft推出了其.NET战略。.NET是一种在Windows下进行程序开发的新架构,一种新的API。而C#作为Microsoft .NET战略的重要组成部分,可以说是专为.NET而开发的编程语言,它可以利用.NET框架及其开发环境中的所有新特性,以及在最近20年来出现的已经逐步规范化的面向对象编程方法。 C#派生于C、C++和Java,但与C、C++、Java、Visual Basic等语言相比又显具优势: ● C语言语法简单、编程灵活,但功能不强,且不是面向对象编程的,只适合用于和操作系统联系紧密的底层开发。 ● C++在C基础上引入了“类”,功能强大了许多,是面向对象编程的语言,但C++根植于ANSI C++语言定义,Microsoft的编译器则是早于ANSI标准十几年编写的,虽然现在已经很接近ANSI标准,但一些新的语法,如Unicode字符串和XML文档等,编辑器并不支持。此外,C++非常复杂,一种功能往往有多种定义和实现方法,导致程序的维护性较差。 ● Java语言自1995年产生以来,已经10多年,作为面向对象、分布式、健壮、安全、可移植、采用Unicode标准的动态编程语言,Java获得了广泛应用,几乎可以编写任何类型的程序软件。但Java派别林立,程序执行速度和配置都很慢,且在很大程度上受到跨平台使用的制约。 ● Visual Basic功能强大,编程实现起来十分简单,但它不是面向对象的编程语言,隐藏了Windows API和COM组件结构的内涵,对于大型应用程序则很难分解和维护。而且使用Visual Basic久了,面向对象的概念将越来越淡化,自己分析问题的能力也会降低,这与当前流行的面向对象编程的潮流是不相符的。 C#兼具C、C++和Java的优势。从语法上来说,C#非常类似于C++和Java,都是采用块结构,并用括号“{}”来标记代码块,用分号分隔语句。但C#学习起来要比C++相对容易得多,且其设计现代开发工具的适应性要比其他语言更高,同时具有Visual Basic的易用性、高性能以及C++的低级内存访问性。C#的主要特征具体表现在以下几个方面: ● 完全支持类和面向对象编程,包括接口和继承、虚函数和运算符重载的处理; ● 定义完整一致的基本类型集; ● 对自动生成XML文档说明的内置支持; ● 自动清理动态分配的内存; ● 可以用用户定义的特性来标记类或方法,这可以用于文档说明,对编译有一定的影响,例如把方法标记为只在调试时编译; ● 对.NET基类库的完全访问权,并易于访问Windows API; ● 可以使用指针和直接内存访问,但C#语言可以在没有它们的条件下访问内存; ● 以Visual Basic的风格支持属性和方法; ● 改变编译器选项,可以把程序编译为可执行文件或.NET组件库,该组件库可以用与ActiveX控件(COM组件)相同的方法由其他代码调用; ● C#可以用于编写ASP.NET动态Web页面和XML Web Services。 对于以上部分特性,虽然C++、Visual Basic和Java也具备,但它们对.NET的支持并不是完整的,而C#则从一开始便使用.NET,而且提供了比其他语言更合适的语法。 1.1.2 用C#能编写什么样的应用程序 C#专用于.NET开发,.NET对所能开发的应用程序类型没有限制,因而对于C#所能开发的应用程序也就没有类型限制,常见的C#应用程序开发类型有: ● Windows应用程序 这类应用程序具备我们非常熟悉的Windows外观和操作方式,如Microsoft Office,使用.NET Framework的Windows Froms模块就可以生成这类应用程序。Windows Forms模块是一个控件库,可用于建立Windows用户界面。 ● Web应用程序 这是一类基于B/S(浏览器/服务器)架构的程序,也就是说,这类程序通过客户端的浏览器来运行。目前,除了HTML等静态网页外,网页的其他一些执行过程多是在服务器端执行,然后将执行结果返回给客户端使用。在.NET Framework的ASP.NET下,可以使用C#通过Web Forms创建用于动态生成Web页的ASP.NET应用程序。 ● Web Services(最初称为NT服务) 这是一类自包含的、分布式的模块化应用程序,可以在网络(通常是Web)中被描述、发布和调用。分布式开发是未来软件开发的技术趋势,.NET开发基于XML Web Services标准,可以实现个人之间、企业之间、个人与企业之间的信息互联,人们可以随时随地在网络上存取和使用信息。 对于开发以上应用程序类型所需的数据库访问,可以通过.NET的ADO.NET来实现。 1.1.3 .NET Framework的工作原理 C#开发基于.NET,采用C#编写的代码都在.NET Framework中运行。在许多情况下,C#特定的语言功能都要依赖于.NET Framework。因而,了解.NET Framework的工作原理,无论是对于C#初学人员还是具备一定.NET开发经验的程序员,都是十分必要的。 1. .NET Framework下的程序运行过程 应用程序在.NET Framework中执行时,要经历编译、JIT编译、执行这3个阶段,图1-1描述了该过程。 图1-1 应用程序在.NET下的执行过程 (1) 编译阶段 开发人员在.NET Framework中对编写的应用程序代码进行编辑时,不是立即创建操作系统特定的本机代码,而是将代码编译为MSIL(Microsoft Intermediate Language,Microsoft中间语言代码)代码,并存储在程序集中。这些中间语言代码不专用于任何一种操作系统,也不专用于任何一种.NET支持的编程语言,这样开发人员就不必考虑与操作系统相关的跨平台使用问题,而只需考虑代码功能的实现即可。 程序集中不仅存储了MSIL代码,还包括可执行的应用程序和对应的库文件,以及MSIL的元数据及可选资源,这样,开发人员在部署应用程序时,只需将文件复制到目标计算机的目录下即可。因为不需要目标系统上的任何信息,只需从该目录中运行可执行文件即可。 (2) JIT编译阶段 要执行应用程序,就必须将MSIL代码编译为专用于目标操作系统的本机代码,这由JIT(Just-In-Time)编译器来完成。在过去,常常要把代码编译成几个应用程序,每个应用程序用于特定的目标操作系统和CPU结构。现在不用这么麻烦了,.NET提供了多个JIT编译器,每个JIT编译器对应于不同的CPU结构,这样在将MSIL代码编译为本机代码时,只需选择合适的JIT编译器即可。 (3) 执行阶段 应用程序编译为本机代码后,程序在执行时是托管的,即由CLR来管理应用程序,其方式是管理内存、处理安全性等,以及允许进行程序的跨语言调试等。 2. .NET Framework的体系结构 .NET Framework是一个崭新的开发框架,是一个统一的、支持多语言、面向对象的开发环境。也就是说,C#并不是进行.NET开发的唯一语言,.NET Framework还支持Visual Basic 2005、Visual C++ 2005、Visual J# 2005,以及JScript脚本语言和COM、COM+组件开发。各类开发人员都可以在.NET下使用自己所擅长的语言来进行.NET开发,而无须担心其他开发人员是否能够使用自己编写的代码,如C#开发人员可以使用Visual Basic程序员编写的代码,反之亦然。 .NET Framework主要由两个构件组成:.NET Framework基类库和CLR(Common Language Runtime,公共语言运行库),如图1-2所示。.NET Framework基类库包含许多不同的模块,例如一个模块包含Windows应用程序开发的构件,另一个模块则包含Web应用程序开发的构件等。此外,模块还可以细分为更具体的子模块,例如在Web开发模块中,还有用于建立Web Services的子模块。在.NET下开发应用程序,实际上就是使用.NET Framework基类库来编写代码。 图1-2 .NET Framework编程环境 .NET开发的语言无关性依赖于其运行库的执行环境,即CLR运行库。我们将在CLR下运行的代码称为托管代码(managed code),CLR管理资源并监视程序的运行,CLR是.NET Framework体系结构中的最重要组成部分之一。使用托管代码的优势主要表现在以下几个方面: ● 平台无关性:将应用程序编译为MSIL代码就可以获得.NET的平台无关性。因为存放代码指令的文件可以放在任一平台中,在执行前只需进行最后的编译即可,这样代码就可以运行在该特定的平台上。虽然目前.NET只能用在Windows平台,但相信在不久的将来,.NET必然可以用于其他各种平台。 ● 提高性能:JIT在将MSIL代码编译为本机代码时,并不是将整个应用程序一次性编译完,而只是编译程序中要用到的代码,而且代码一旦编译后,将被存储起来,下次再用这部分代码时,便不用再重新编译,直到退出该应用程序为止。实际上,程序中的代码并不是在运行时都要使用,使用JIT编译器可以极大提高程序的运行效率,这也就是托管代码可以和机器代码拥有几乎相同执行速度的原因所在。 ● 语言的互操作性:使用JIT不仅可以实现平台无关性,还可以实现语言的互操作性。也就是说,可以将.NET所支持的任何一种语言编译为中间代码,然后与从其他语言编译过来的代码进行交互操作。 ● 垃圾回收:使用托管代码的另外一个好处就是垃圾回收,这可以确保当应用程序不再使用某些内存时,将这些内存完全释放以节省资源。在.NET推出之前,这主要由程序员负责完成,而这样做的后果就是很有可能导致系统崩溃,因为代码的几个简单错误,就可能将大块内存分配到错误的地方。.NET的垃圾回收功能会经常检查计算机内存,并从中自动删除不再需要的内容。 ● 可以使用.NET基类库:.NET基类库是.NET的另外一个非常重要的组成部分,从开发人员角度来说,使用托管代码的最大好处是可以使用.NET基类库。.NET基类库是一个内容丰富的托管代码类集合,可以完成以前要通过Windows API来实现的绝大多数功能。这些类派生自与MISL中间语言相同的对象模型,也基于单一继承性,无论基类是否合适,都可以实例化对象,也可以从它们派生自己的类。.NET基类的一个重要优点就是非常直观和易用,例如禁用文本框控件,只需将该控件的“Enabled”属性设置为“False”即可。 注意:C#本身只是一种编程语言,尽管它用来生成面向.NET环境的代码,但它本身不是.NET的一部分。.NET的一些特性,C#并不支持;而C#语言支持的一些特性,.NET也不支持(如运算符重载)。 1.1.4 C#的编程和运行环境 .NET Framework可以运行在Windows 98/2000/XP和Windows Server 2003上,要使用.NET编写代码,还需要安装.NET SDK,除非使用内置了.NET Framework 1.0和1.1的Windows Server 2003。读者如果要运行本书中的例子,应安装.NET Framework 2.0,即使运行Windows Server 2003,也要安装.NET Framework 2.0。因为安装Windows Server 2003时,.NET Framework 2.0并不是默认安装选项。 一般情况下,除非要使用文本编辑器或其他第三方开发环境来编写C#代码,否则在部署和发布软件作品前,使用Visual Studio 2005来编写和测试C#程序。读者在安装Visual Studio 2005时,系统会自动安装.NET Framework 2.0和.NET SDK。 1.2 Visual Studio 2005开发环境 Visual Studio 2005(简称为VS 2005)是一个全面集成的开发环境,用于编写、调试代码,把代码编译为程序集进行发布。实际上,VS 2005提供了一个非常专业的多文档界面应用程序,在该应用程序中可以进行与开发代码相关的所有操作。 1.2.1 定制C#开发环境 用户成功安装VS 2005后,如果是第一次运行,系统会显示一个参数列表,该列表中列出了这个开发环境的以前版本,如果要定制C#开发环境,应选择“Visual C#开发设置”,单击【开始Visual Studio】按钮即可进入VS 2005开发环境,如图1-3所示。 图1-3 VS 2005开发环境 如果用户不是第一次运行VS 2005,并且已选择了别的语言的开发环境,可采用如下方法重新定制C#开发环境:选择【工具】|【导入和导出设置】命令,打开【导入和导出设置向导】对话框,在其中选中【重置所有设置】单选按钮,单击【下一步】按钮,如图1-4左图所示。 打开【保存当前设置】页,VS 2005开发环境是完全可以定制的,但默认设置很适合初学人员,在该对话框中选中【否,仅重置设置,从而改写我的当前设置】单选按钮,单击【下一步】按钮,打开【选择一个默认设置集合】页,在列表框中选择【Visual C#开发设置】选项,单击【完成】按钮,如图1-4右图所示,即可进入如图1-3所示的采用C#编程语言的VS 2005开发环境。 图1-4 重新定制VS 2005的开发环境 VS 2005默认的开发界面由主窗口、【解决方案资源管理器】窗口和【工具箱】窗口组成。在VS 2005启动时,主窗口会默认显示一个介绍性的“起始页”,起始页中包含许多文档,每个文档都有一个标签,单击文件名,可在各个文件间切换。起始页可以显示图形用户界面,可用于创建和设计项目、文本文件以及各种内置于VS 2005的工具。 但VS 2005所提供的工具远不止这些,【服务器资源管理器】窗口、【属性】窗口、【输出】窗口等也是开发项目中经常要使用到的工具,用户可通过选择【视图】菜单下的相应命令来打开这些窗口,如图1-5所示。 ● 文本编辑器:用于编写C#源代码。 ● C#编译器:用于将C#源代码转换为可执行程序。 ● Visual Studio 2005调试器:用于对程序进行测试。 ● 工具箱和设计器:方便通过使用鼠标迅速开发用户界面。 ● 解决方案资源管理器:用于查看和管理项目文件和设置。 ● 项目设计器:用于配置编译器选项,部署路径、资源及更多其他内容。 ● 类视图:用于根据类型(而不是文件)在源代码中导航。 ● 属性窗口:用于配置用户界面中控件的属性和事件。 ● 对象浏览器:用于查看动态链接库(包括.NET Framework程序集和COM对象)中可用的方法和类。 ● 文档资源管理器:用于在本地计算机和Internet上浏览和搜索产品文档。 各种窗口可以以“停靠”和“隐藏”两种方式显示在开发界面中。当用户打开一个窗口时,系统默认以“隐藏”方式显示,如图1-3中的【工具箱】窗口、【服务器资源管理器】窗口和【数据源】窗口。当用户需要使用它们时,只需将光标移到窗口名称上,它们便会显示出来,如图1-6所示。 图1-5 打开所需窗口 图1-6 显示隐藏窗口 在显示的隐藏窗口中单击【自动隐藏】按钮,该窗口将会以停靠方式显示在VS 2005开发界面中,此时【自动隐藏】按钮变成形状,如图1-3中的【解决方案资源管理器】窗口和【属性】窗口。如果要将停靠的窗口隐藏,只需再次单击【自动隐藏】按钮即可。如果用户只是暂时使用某个窗口,为了最大化地显示开发环境,则可将该窗口设置为“隐藏”方式,如果在开发过程中要经常使用某个窗口,则可将其设置为“停靠”方式。 如果用户要改变某个窗口在开发界面中的停靠位置,可选中并拖动该窗口,在代表开发界面位置的相应导航按钮上单击,即可将该窗口停靠在指定位置。 1.2.2 Visual Studio 2005的特性 Visual Studio 2005相对于Visual Studio 2003及以前版本,无论是在功能上,还是开发的便利上,都有很大的改进,主要体现在以下几个方面。 ● 文本编辑器:在文本编辑器中编写C#代码,以及VB 2005、C++等其他语言代码时,代码可以自动布局,如缩进代码行,匹配代码块的首尾括号,提供彩色编码的关键字等。此外,在编辑代码时,它还能执行一些语法检查,给可能产生编译错误的代码加上下划线,这也称为是设计期间的调试。文本编辑器还提供了智能感知功能,在开始键入时,它会自动显示类、字段或方法名,在输入参数时,它还会自动显示可重用方法的参数列表,这极大提高了开发人员的编程效率,如图1-7所示。 图1-7 文本编辑器 ● 设计视图:可以在项目中可视化地放置用户界面和数据访问控件,VS 2005会自动在源文件中添加必要的C#代码,并在项目中对这些控件进行实例化,如图1-8所示。 ● 在环境中编译:可以通过菜单命令来编译项目,而不必在命令行上运行C#编译器,VS 2005会调用C#编译器,把所有的命令行参数传递给编译器,例如要引用的程序集和要生成什么类型的程序集(例如可执行文件或库.dll)。VS 2005还可以直接运行编译好的可执行文件,用户可以查看这些文件的运行情况是否正常,并可以选择不同的编译配置,例如,编译一个调试(debug)版本或发布(release)版本。 ● 集成的调试程序:代码在第一次运行时一般不会正确执行。也许在第2次、第3次才能正确地运行。VS 2005会无缝地链接到一个调试程序上,可以在该调试环境中设置断点,观察变量。 ● 集成的MSDN帮助:VS 2005可以在IDE(集成开发环境,Integrated Development Environment)中调用MSDN文档帮助。例如在文本编辑器中,如果不能确定某个关键字的含义,可以选择该关键字,按下F1键,VS 2005就会打开MSDN,并在其中显示相关的主题。同样,如果不知道某个编译错误是什么意思,可以选择错误消息,按下F1键,MSDN会显示该错误的详细信息。 ● 访问其他程序:VS 2005还能调用许多其他工具来查看和修改计算机或网络的一些内容,而无须退出开发环境。利用这些工具,可以检查运行服务和数据库连接,直接查询SQL Server数据表,甚至打开Internet Explorer来浏览网页。 1.3 编写C#应用程序 本节以3个简单的C#应用程序,向读者介绍进行C#开发的一般流程,并对【解决资源管理器】窗口、【属性】窗口、【错误列表】窗口等开发过程中常用窗口的功能和作用做简单介绍。 1.3.1 第一个C#控制台应用程序—— Hello New World 控制台应用程序是一种在后台运行的程序,没有独立的窗口,它不像Windows应用程序那样,可以通过鼠标单击按钮等控件来实现操作,而是通过命令行来运行。本书将经常使用这种应用程序类型来讲解C#语言的基础知识和编程技巧。 例1-1 创建一个简单的C#控制台应用程序。 启动VS 2005,选择【文件】|【新建】|【项目】命令,打开【新建项目】对话框,在【项目类型】列表中单击以展开【Visual C#】节点,在右侧【模板】列表框中选中【控制台应用程序】选项,在【名称】文本框中输入“Hello New World”,保持项目的默认保存路径,单击【确定】按钮,如图1-9所示。 图1-9 创建C#控制台应用程序 项目初始化后,【解决方案资源管理器】窗口显示新建的项目,以及项目中的文件和文件内容等,源文件“Program.cs”中包含了最初的项目框架代码,主窗口显示了该代码,如图1-10所示。 图1-10 控制台项目的初始化 “.cs”表明“Program.cs”是一个C#文件,从主窗口中默认的代码可以看出,该程序文件包含了C#可执行程序所必需的基本项:一个命名空间和一个包含Main()方法的类,其中Main()方法是程序的入口点。关于using语句和命名空间,我们将在第2章详细讨论。 注意:【解决方案资源管理器】窗口中显示了创建的C#项目,须要注意的是解决方案和项目是两个完全不同的概念。项目是一组要编译到单个程序集中的所有源文件和资源,可以是类库、Windows GUI应用程序等;而解决方案是构成某个应用程序的所有项目集,它可以包含多个项目,可以在其中添加或删除任何项目。 在主窗口Program.cs代码中添加如下程序代码: static void Main(string[] args) { Console.WriteLine("Hello New World--我的第一个C#应用程序"); Console.ReadKey(); } 选择【调试】|【启动调试】命令,稍后即可得到如图1-12所示的运行结果。按下任意键,退出该应用程序。 图1-12 程序的运行结果 示例说明: 在void Main()方法中,使用Console.WriteLine()方法输出字符串“Hello New World—— 我的第一个C#应用程序”。由于控制台窗口会在执行完毕后立即关闭,这样就无法看到程序运行的结果,因而使用Console.ReadKey(),告诉程序在结束前等待用户按键。 VS 2005提供了多种方法来编译和执行程序,可以使用【调试】|【启动调试】命令,也可以按下一个快捷键F5,或者单击工具栏上的【启动调试】按钮。此外,VS 2005还允许以非调试模式运行程序,方法是选择【调试】|【开始执行】命令或使用Ctrl+F5快捷键。程序编译完成后,用户可以在存储项目的位置运行生成的.exe文件(即可执行程序)。 下面对VS 2005开发环境中的一些重要组成部分作简单介绍。 1.【解决方案资源管理器】窗口和【类视图】窗口 【解决方案资源管理器】窗口和【类视图】窗口以两种不同的方式来显示创建的项目,如图1-13所示。默认情况下,【类视图】窗口是不显示的,可以通过选择【视图】|【类视图】命令来打开它,【类视图】窗口默认显示在与【解决方案资源管理器】窗口相同的位置。 图1-13 【解决方案资源管理器】窗口和【类视图】窗口 在【解决方案资源管理器】窗口中,可以改变主窗口中显示的代码。方法是:右击.cs文件,从弹出菜单中选择【查看代码】命令,或者直接双击该.cs文件。此外,还可以删除、重命名这些文件,只需从弹出菜单中选择相应的命令即可。在【解决方案资源管理器】窗口中还显示了其他类型的文件,如项目资源文件(这些文件可能不是C#文件,如位图图像和声音文件等)。“引用”文件夹中包含的是项目中使用的一个.NET库列表,这是一种标准的引用方法,后面会详细介绍。 在【类视图】窗口中可以查看项目的代码结构,后续章节将对代码结构做详细介绍。 2.【属性】窗口 该窗口提供了项目中具体内容的详细信息,可以对单个元素的属性值进行配置,如设置Windows应用程序中按钮的外观和显示文本等。通常在【属性】窗口中对项目的改变会直接影响代码,系统会自动添加或修改代码行,这与手动修改代码的效果是相同的。例如选中项目中Program.cs文件,【属性】窗口将显示如图1-14所示的内容,如果修改该C#文件的文件名或保存路径,这些修改将反映在程序代码中。 3.【错误列表】窗口 该窗口可跟踪用户在编写C#程序过程中出现的语法等基本错误,以便在编译程序之前尽量减少错误。例如将Program.cs中的代码行“Console.ReadKey();”末尾的分号删除,【错误列表】窗口将显示如图1-15所示的错误。在窗口中双击显示的错误,光标便会自动跳转到源代码中出现错误的地方,这样可以快速更正错误,代码中有错误的代码行会显示红色的波浪线,便于快速浏览源代码以查找错误。 图1-14 【属性】窗口 图1-15 【错误列表】窗口 在将【错误列表】窗口中的错误更正完毕之前,VS 2005将不允许对程序进行编译和运行。【错误列表】窗口中显示了出错代码所在的行号,默认情况下,行号不显示在VS 2005的文本编辑器中,但有时显示行号对于修改错误是很方便的。选择【工具】|【选项】命令,打开【选项】对话框,在左侧列表中展开【文本编辑器】|【C#】节点,并选中节点下的【常规】选项,在右侧参数中选中【行号】复选框,单击【确定】按钮即可,如图1-16所示。 图1-16 在文本编辑器中显示代码行号 1.3.2 第一个C# Windows Forms(窗体)应用程序—— Clicke Me Windows Forms是Visual Basic 6窗体的.NET版本,要设计一个图形化的Windows窗体界面,只需把控件从【工具箱】窗口拖放到Windows窗体上即可。要确定窗体的行为,只需为窗体控件编写相应的事件处理代码即可。VS 2005将Windows Forms项目编译为.exe文件,该文件与.NET运行库一起安装在目标客户端上。本节通过一个简单的示例向读者介绍启动和运行Windows Forms应用程序的方法和流程,但并不详细介绍程序实际完成的工作,本书后续章节将详细介绍Windows Forms应用程序。 例1-2 创建一个简单的C# Windows Forms应用程序。 选择【文件】|【新建】|【项目】命令,打开【新建项目】对话框。在【项目类型】列表框中展开【Visual C#】|【Windows】节点,在右侧【模板】列表框中选中【Windows应用程序】选项,在【名称】文本框中输入“Clike Me”,保持默认的存储路径,在【解决方案】下拉列表中选择【创建新解决方案】,单击【确定】按钮,如图1-17所示。 图1-17 创建Windows Forms应用程序 注意:由于创建的“Hello New world”控制台项目还处于打开状态,为避免新的Windows Forms项目被添加到控制台项目的解决方案中,应注意在【解决方案】下拉列表中选择【创建新解决方案】选项。 Windows Forms项目初始化完毕后,主窗体会显示一个空白的Windows窗体,在设计视图选中该窗体,可通过控制点调节窗体的大小。【解决方案资源管理器】将显示新的解决方案和该方案下的Windows Forms项目,以及项目中的各种文件,如图1-18所示。 图1-18 Windows Forms项目的初始化 选中窗体,【属性】窗口显示了该窗体的详细信息,包括名称、背景颜色、大小、透明度等,将【Text】属性设置为“Windows窗体示例”,如图1-19所示。用户在【属性】窗口中对窗体的修改将直接反映到设计视图中窗体的外观上。 在【工具箱】窗口中展开【所有Windows窗体】节点,在该节点下单击【Button】控件,然后在设计视图中的窗体上绘制按钮,如图1-20所示。 图1-19 修改窗体属性 图1-20 在窗体中绘制按钮控件 按钮上显示的文本默认为“button1”,为了使该按钮的功能更加醒目以方便与用户进行交互,常常需要对按钮上显示的文本进行修改。可选中该按钮,然后在【属性】窗口中将它的【Text】属性设置为“Click Me”。 在窗体上双击“Click Me”按钮控件,在文本编辑器中编辑该按钮的单击事件代码(阴影部分)如下所示: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Clike_Me { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show("我的第一个C# Windows Forms应用程序"); } } } 上述显示的是整个窗体的代码,也可以在【解决方案资源管理器】窗口右击“Form1.cs”,从弹出菜单中选择【查看代码】命令,在文字编辑器中查看窗体的代码。须要注意的是前面所修改的窗体和按钮的【Text】属性,只是修改了窗体和按钮的显示文字,而并没有修改它们的名称,因而在程序中仍然使用系统原来的默认名称。如果要修改名称,可通过在【属性】窗口中修改它们的【Name】属性来完成。 按F5键运行该程序,在打开的【Windows窗体示例】窗口中单击【Click Me】按钮,将打开一个消息对话框,如图1-21所示。像每个标准Windows应用程序一样,单击右上角的【关闭】按钮,可退出应用程序。 示例说明: VS 2005完成了许多工作,我们可以非常容易地创建一个实用的Windows应用程序。该应用程序同Windows操作系统下的其他窗口一样,可以移动、重新设置大小、最小化等。我们不必编写任何代码,它就可以工作,添加的按钮也是一样,双击按钮,VS 2005就知道我们要添加其单击事件代码。当运行该应用程序时,用户单击该按钮,就执行我们编写好的事件代码。 当然,Windows应用程序并不仅局限于带有按钮的普通窗体,从【工具箱】窗口我们可以看到有许多控件。其中一些大家可能非常熟悉,如按钮、文本框、下拉列表、单选按钮等,它们使用起来非常方便,可以大大节省开发人员设计Windows应用程序界面的时间。 应用程序的代码保存在Form1.cs中,在窗体的设计视图中设计窗体布局时,VS 2005开发环境生成的代码在默认情况下是隐藏的,它们与窗体上控件的布局有关,如果要查看这些隐藏的代码,可在【解决方案资源管理器】窗口展开【Form1.cs】节点,双击节点下的“Form1.Designer.cs”文件,可查看其中内容,如图1-22所示。 图1-21 Windows Forms程序的运行结果 图1-22 窗体自动生成的代码 VS 2005使用代码突出显示系统来显示这部分C#代码,在代码的左侧有一些灰色的线条,上面有“+”号(笔者的机器上是23行)和“-”号的方框,这些方框可用于展开和折叠代码区域。单击“+”号,可展开隐藏的代码,此时“+”号将变成“-”号;再次单击“-”号,可将代码隐藏起来,此时“-”号将变成“+”号。也可将光标指向隐藏的代码,这些隐藏代码将自动显示出来。在实际的编程中,这种突出显示代码的方式非常方便,可以根据需要扩展和收缩代码区域。例如查看一组收缩的代码段,可以非常方便地浏览大量C#代码。 1.3.3 第一个C# Web应用程序—— Welcome to You Web应用程序是一种存储在Web服务器上并在客户端浏览器上执行的应用程序。它与Windows应用程序不同:Windows应用程序一般基于C/S(客户机/服务器)架构,又称为胖客户端应用程序,而Web应用程序则基于B/S(浏览器/服务器)架构,又称为瘦客户端应用程序。使用VS 2005的ASP.NET可以创建能在任意浏览器上显示的Web应用程序,它的开发方式与Windows应用程序非常类似。 例1-3 创建一个简单的C# Web应用程序。 选择【文件】|【新建】|【网站】命令,打开【新建网站】对话框。在【模板】列表框中选中【ASP.NET网站】选项,系统默认选用Visual C#作为编程语言,在【位置】下拉列表中选择【文件系统】。如果要使用IIS,则选择【HTTP】,系统会自动创建一个虚拟目录。单击【确定】按钮,如图1-23所示。 图1-23 创建ASP.NET网站 项目初始化后,【解决方案资源管理器】窗口会自动显示新创建的ASP.NET网站项目及项目中的文件,主窗口显示default.aspx文件的代码,如图1-24所示。代码的第一行指定了要使用的编程语言和类。 图1-24 网站项目的初始化 在文本编辑器的左下角单击【设计】按钮,切换到设计视图。打开【工具箱】窗口,双击其中的【Label】控件,该控件将自动添加到页面上。选中该Label控件,在【属性】窗口中将其【Text】属性设置为“我的第一个C# Web应用程序”。在设计视图中调整Label控件的大小,如图1-25所示。 图1-25 添加Label控件 选择【调试】|【开始执行】命令,启动Web应用程序。此时,VS 2005会自动启动Visual Web Developer Web Server。双击任务栏右下角的按钮,打开如图1-26所示的对话框,该对话框显示了Web服务器的物理路径和虚拟路径,以及Web服务器监听的端口。通过该对话框还可以停止Web服务器。 启动Web应用程序后,Internet Explorer会显示Web页面,如图1-27所示。选择【查看】|【源文件】命令,可以查看其源代码,服务器端的控件已经转换为纯HTML代码。 图1-26 查看Web服务器状况 图1-27 运行Web应用程序 示例说明: 上述示例非常简单,不涉及页面的动态显示以及与数据库的交互等内容。单击文本编辑器的【源】按钮,可以切换到代码视图,可以发现系统自动生成了添加控件的代码,如图1-28所示。VS 2005将用户界面和代码分别存储在aspx和cs文件中,这样更便于维护程序。关于Web应用程序的更详细内容,我们会在后续章节介绍。 图1-28 VS 2005自动生成的添加Label控件的代码 本 章 小 结 本章概述了C#语言的诞生和特点,及其相对于C、C++、Java、Visual Basic等语言的优势,并对C#和.NET平台的关系作了较为详细的介绍。理解.NET Framework的工作原理和程序在.NET下的执行过程,是理解和认识C#编程实质的基础。本书的C#开发环境基于VS 2005,因而对VS 2005的一些界面特征和特点作了描述。本章最后通过3个简单的示例,向读者展示了C#程序开发的一般流程,以及C#常见的应用程序开发类型。 习 题 填空题 1. C#语言主要面向 开发环境进行编程。 2. 使用C#语言所能够开发的应用程序类型有 、 、 和 。 3. 在.NET开发环境下,程序的执行要经历 、 和 3个阶段。 4. .NET开发的语言无关性依赖于其运行库的执行环境,称为 运行库,把在该运行库下执行的代码称为 代码。 5. 要编写和运行C#代码,用户必须安装 。 6. VS 2005中的窗口可以以 和 两种方式显示在开发界面中。 7. C#文件采用 作为扩展名。 8. Windows应用程序一般基于C/S(客户机/服务器)架构,又称为 端应用程序;而Web应用程序则基于B/S(浏览器/服务器)架构,又称为 端应用程序。 选择题 9. 以下何种程序具有我们非常熟悉的Windows界面和操作方式?( ) A. Windows应用程序 B. Web应用程序 C. Windows Services D. Windows组件 10. 将代码编译为目标计算机的本地代码,通过( )编译器来完成。 A. MSIL B. JIT C. CLR运行库 D. .NET基类库 简答题 11. 简述程序在.NET下的执行过程。 12. 什么是C/S架构?什么是B/S架构?两者有何区别和联系? 13. 解决方案和项目一样吗?它们的不同之处在哪里? 上机操作题 14. 创建一个简单的C# 控制台应用程序。 15. 创建一个简单的C# Windows应用程序。 16. 创建一个简单的C# Web应用程序。 ?? ?? ?? ?? Visual C# 2005程序设计与应用简明教程 ? 第1章 C# 概 述 ? 6 7