精品课程《C#网络编程基础(全)》PPT课件.ppt
C#网络编程基础,课程特点:,入门(1-8):提高(9-13):实例(14-16):,第1章 快速上手,从现在开始,我们将进入.NET平台C#编程世界。.NET是微软(Microsoft)精心打造的新一代技术开发平台,是微软技术战略的核心。C#是.NET平台上的主流开发语言。本章向读者展示.NET框架以及C#语言的概貌,力求简洁明了,一方面使读者能尽快上手编写程序,另一方面为阅读后续章节提供指导。在本章,读者会学习以下知识点:了解Microsoft.NET战略目标和意义。理解C#的优秀特点,以及C#3.5版本的新特性。安装Visual Studio 2008开发环境。安装MSDN帮助系统,并学会寻求帮助。编写第一个控制台应用程序,开始C#之旅。,1.1 为什么选择Microsoft.NET,微软推出的.NET战略具有划时代的意义,并希望通过.NET争取在网络时代赢得像Windows,甚至比Windows更胜一筹的垄断地位。.NET的内涵已经大大超出了操作系统的范畴,势必会导致微软更进一步的提升自己的地位。Visual Studio是微软公司推出的.NET开发环境,是目前最流行的Windows平台应用程序开发环境。目前已经发展到9.0版本,也就是Visual Studio 2008。2008年12月份,一个振奋人心的信息传来:微软公布了下一代开发工具和平台“Visual Studio Team System 2010”以及.NET Framework 4.0的相关信息,并透露他们将在2009年底或者2010年正式发布。正当我们兴奋之时,微软又趁热打铁,发布了Visual Studio 2010的社区技术预览版(Community Technology Preview,CTP)Visual Studio 2010 CTP,微软的官方去下载地址:,Visual Studio 历史简介,Visual Studio 是微软公司推出的开发环境。是目前最流行的 Windows 平台应用程序开发环境。目前已正式发布的是 9.0 版本,也就是 Visual Studio 2008 N年前,江湖上流传着几个大佬的故事,他们说:Dev-C+灵活又小巧,C+Builder开发效率高;Turbo C是万人迷,Visual Studio的资格老。可如今,江湖上只剩下最后一个大佬Visual Studio了,其他几位不是支持者渐少,不成气候,就是转投他人怀抱,中道衰落,让人难免生出几分遗憾。但是反过来,我们又对Visual Studio这位“江湖最后的大佬”增添几分敬仰之情。据说这位大佬又要出新的版本,我们这些江湖八卦者,哪有错过的道理。要想深入的了解一个人,需要从他的童年开始。我们想了解Visual Studio,故事也就要从它的1.0开始。,功能:Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office 插件。Visual C+1.0:1992年4月,微软发布了革命性的操作系统Windows 3.1,把个人计算机引进了真正的视窗时代。微软在原有C+开发工具Microsoft C/C+7.0的基础上,开创性地引进了MFC(Microsoft Foundation Classes)库,完善了源代码,成为Microsoft C/C+8.0,也就是Visual C+1.0,并于1992年发布。Visual C+1.0是真正意义上的Windows IDE,这也是Visual Studio的最初原型。虽然以现在的眼光来看,这个界面非常简陋和粗糙,但是它脱离了DOS界面,让用户可以在图形化的界面下进行开发,把软件开发带入了可视化(Visual)开发的时代。从此,大佬的时代开始了。,Visual Studio 6.0:1998 年,微软公司发布了 Visual Studio 6.0。所有开发语言的开发环境版本均升至 6.0。这也是 Visual Basic 最后一次发布,从下一个版本(7.0)开始,Microsoft Basic 进化成了一种新的面向对象的语言:Microsoft Basic.NET。由于微软公司对于 Sun 公司 Java 语言扩充导致与 Java 虚拟机不兼容而 Sun 被告上法庭,微软在后续的 Visual Studio 中不再包括面向 Java 虚拟机的开发环境。C#:2002 年,随着.NET 口号的提出与 Windows XP/Office XP 的发布,微软发布了 Visual Studio.NET(内部版本号为 7.0)。在这个版本的 Visual Studio 中,微软剥离了 Visual FoxPro 作为一个单独的开发环境以 Visual FoxPro 7.0 单独销售,同时取消了 Visual InterDev。与此同时,微软引入了建立在.NET 框架上(版本1.0)的托管代码机制以及一门新的语言 C#(读作 C Sharp,意为 C+)。C#是一门建立在 C+和 Java 基础上的现代语言,是编写.NET 框架的语言。,.NET 的通用语言框架机制(Common Language Runtime,CLR),其目的是在同一个项目中支持不同的语言所开发的组件。所有 CLR 支持的代码都会被解释成为 CLR 可执行的机器代码然后运行。Visual Basic、Visual C+都被扩展为支持托管代码机制的开发环境,且 Visual Basic.NET更是从 Visual Basic 脱胎换骨,彻底支持面向对象的编程机制。而 Visual J+也变为 Visual J#。后者仅语法同 Java 相同,但是面向的不是 Java 虚拟机,而是.NET Framework。,2003 年,微软对 Visual Studio 2002 进行了部分修订,以 Visual Studio 2003 的名义发布(内部版本号为 7.1)。Visio 作为使用统一建模语言(UML)架构应用程序框架的程序被引入,同时被引入的还包括移动设备支持和企业模版。.NET 框架也升级到了 1.1。2005 年,微软发布了 Visual Studio 2005。.NET 字眼从各种语言的名字中被抹去,但是这个版本的 Visual Studio 仍然还是面向.NET 框架的(版本2.0)。它同时也能开发跨平台的应用程序,如开发使用微软操作系统的手机的程序等。总体来说是一个非常庞大的软件,甚至包含代码测试功能。,使用Visual Studio 2005,专业开发人员能够:,创建满足关键性要求的多层次的智能客户端、Web、移动或基于Microsoft Office的应用程序。使用改进后的可视化设计工具、编程语言和代码编辑器,享受高效率的开发环境 在统一的开发环境中,开发并调试多层次的服务器应用程序 使用集成的可视化数据库设计和报告工具,创建SQL Server 2005解决方案 使用Visual Studio SDK创建可以扩展Visual Studio IDE的工具,Microsoft为单独工作或在小型团队中的专业开发人员提供了两种选择,Visual Studio 2005 Professional Edition和用于Microsoft Office系统的Visual Studio 2005工具。每种版本都在标准版的特性上进行了扩展,包括用于远程服务程序开发和调试、SQL Server2005开发的工具,以及完整的、没有限制的开发环境。每种产品都可以单独购买或打包定购。专业开发人员喜欢自由的使用.NET Framework 2.0,它是一种稳健的、功能齐备的开发环境,支持创建扩展Visual Studio集成开发环境的工具。,随着即将发布的 Windows Vista(内部名称:Longhorn)和 Office 2007,Visual Studio 9,携手 Windows Server 2008 也渐渐浮出水面。Visual Studio 9 目前可以确定的是支持建立于 DHTML 基础上的 AJax 技术,这种微软在 Visual InterDev 时代提出的基于异步的客户端动态网页技术在当年并没有像微软预期中的那么流行起来,反而随着 GMail 等应用而东山再起,渐渐成为主流网络应用之一。同时 Visual Studio 9 会强化对于数据库的支持以及微软新的基于工作流(Workflow)的编程模型。预计为了保持与 Office 系列的统一,Visual Studio 9 的名称为 Visual Studio 2008。,Visual Studio 2010的新特性,(1)C#4.0中的动态类型和动态编程;(2)多显示器支持;(3)使用Visual Studio 2010的特性支持TDD;(4)支持Office;(5)Quick Search特性;(6)C+0 x新特性;(7)IDE增强;(8)使用Visual C+2010创建Ribbon界面;,Visual Studio 2008是基于Vista平台的,Vista的失败,也必然会导致Visual Studio 2008的昙花一现。现在,微软把宝都押在了即将到来的新平台Windows 7上。作为面向下一代平台的开发工具,Visual Studio 2010提供了很多工具来帮助开发者开发基于Windows 7的应用程序,同时使那些已经存在的非托管应用程序,通过一定的处理也同样能够具有新的操作系统所带来的特性。在Visual Studio 2010中,微软花了很大的力气来使得非托管C+代码的开发更加容易和高效。例如,我们升级了MFC的库和头文件以全面支持Windows 7的界面元素,包括Ribbon界面,搜索功能甚至多点触摸特性的支持。,1.1.1 Microsoft.NET框架概述,Microsoft.NET Framework是一个平台,此平台支撑着本书所讲的C#语言。.NET Framework旨在提供一个一致的面向对象的编程环境,保证代码执行安全性,同时为团队提供方便的软件部署和版本控制,使开发人员的经验在面对类型大小不相同的应用程序时保持一致的编程习惯。按照工业标准生成所有通信,基于.NET Framework的代码可与任何其他代码集成。.NET Framework的平台体系结构如图1.1所示。由图1.1可以看到,.NET Framework具有两个主要组件:公共语言运行库(CLR)和.NET Framework类库(FCL)。图1.2显示了.NET Framework的核心组件及其要素。,1.1.2 为什么是C#,C#是.NET平台开发中最好的一门语言,是应.NET而生的。作为一个程序员,如果能够掌握一门语言,这门语言能够继承C+的强大灵活,能够像Java一样语法简洁易于理解,又能像Visual Basic一样提供“拖放”式功能的易用性,那是非常愉快的事情。正好,C#就是这样的一门语言,能够集众语言之所长,创流行语言之所新。在学习C#之前,首先了解它的读法,读作(“C Sharp”),有点像“夏普”的发音,意为C+。C#是一种简单、现代、面向对象且类型安全的编程语言。C#起源于C语言家族,自身即带了“C”的一些特点。所以,对于学过C系语言(如C、C+、Java)的程序员,可以很快的熟悉这种新的语言。,1.1.3 C#从C、C+、Java继承的特点,C#的历史并不长,但其发展的势头非常快,其中最主要的原因是,C#集众语言之所长,具有许多优秀的特性。1.C#从C、C+继承的特点编译:结构体:预编译:没有了#include伪指令:操作符重载:2.C#从Java继承的特点类:界面:布尔运算:错误处理:内存管理:,1.1.4 C#独具的特点,C#作为流行的开发语言,其自身具有独特的优良特性,使其能够吸引这么多的程序员,用它来开发出非常优秀的软件。1.中间代码。2.命名空间中的申明。3.基本的数据类型。4.两个基本类。5.参数传递。6.索引下标。7.委托和事件。,1.2 安装Microsoft Visual Studio 2008,时至编写本书的时候,Visual Studio 2008和.NET 3.5的正式试用版本可以下载了。读者可以下载Visual Studio 2008产品,也可以下载较小的Visual Studio 2008 Express版本。如果学习C#,Visual Studio 2008是最好的开发环境。本章将手把手教会读者如何搭建Visual Studio 2008开发环境。,1.2.1 获得软件资源,读者可以通过不同的方式获得Visual Studio 2008,可以购买安装光盘,也可以直接登录微软官方网站下载。推荐通过官方网站下载,这样可以得到最新版本,还能及时获得更新信息。Visual Studio的下载地址是:http:/Studiotudio/default.aspx。当然,可以下载Visual Studio 2008 Professional Edition,还可以下载功能更加强大的Visual Studio Team System 2008 Team Suite。在页面上还发布了如何升级的知识,同时,还可以免费下载以下内容:(1)适用于Visual Studio 2008的MSDN库。(2)Microsoft.NET Framework 3.5框架。(3)免费阅读 Visual Studio 电子书。,1.2.2 在Windows操作系统下安装开发环境,安装Visual Studio 2008的系统要求:支持的操作系统:Windows Server 2003;Windows Vista;Windows XP。最低配置:1.6 GHz CPU,384 MB 内存,1024x768 显示分辨率,5400 RPM 硬盘。建议配置:2.2 GHz 或更快的CPU,1024 MB或更大的内存,1280 x1024显示分辨率,7200 RPM或更快的硬盘。在Windows Vista上运行的配置要求:2.4 GHz CPU,768 MB内存。安装Visual Studio 2008的步骤如下:,1.3 进入Visual Studio 2008编程世界,安装完程序以后,想必读者迫不及待地想要实践了,这一节将会带着读者熟悉Visual Studio 2008的开发环境,为进入开发阶段作最后的准备。工欲善其事,必先利其器。先熟悉了开发环境,再在上面开发,会取得更快的进步。,1.3.1 熟悉开发环境,首先确定软件已经安装在你的电脑上了,现开始启动程序,如图1.9所示,选择“开始”“程序”“Microsoft Visual Studio 2008”“Microsoft Visual Studio 2008”命令,进入Visual Studio2008开发环境。第一次启动时,会看到如图1.10所示的默认选择页面,选择“Visual C#开发设置”命令,启动C#程序设置。,1.3.2 熟悉菜单栏功能,菜单栏包括了Visual Studio 2008的大多数功能,同时,菜单栏随着不同的项目、不同的文件动态的变化,此处对菜单栏常用功能作一个简单介绍,如表1.1所示。,1.3.3 熟悉工具栏功能,工具栏提供了最常用的功能的快捷方式,熟悉工具栏上的操作,会大大节省工作时间。同菜单栏一样,工具栏也是动态变化的,而且工具栏的内容也可以根据操作员的习惯自行定制。如图1.12所示,是位于菜单栏下面的工具栏。这个工具栏提供了几个基本常用的操作,包括文件的新建、打开、保存,以及常用的文件编辑操作,包括程序的运行和调试快捷图标。同时提供对解决方案资源管理器、对象浏览器、属性、工具箱等窗口的快捷访问。,1.3.4 熟悉“工具箱”面板,工具箱是Visual Studio 2008最重要的展示工具的面板,一般停靠在Visual Studio 2008 IDE的左边,如图1.13所示是工具箱的外观,图1.14是展开公共控件选项的效果。,1.3.5 熟悉“属性”面板,“属性”面板是Visual Studio 2008中经常用到的工具之一,属性窗口为可视化界面开发提供了简单的属性操作,同时提供帮助提示,减轻了程序员记忆对象属性的难度;属性还提供事件的管理功能,“属性”面板可以管理控件的事件,方便编程时对事件的处理。“属性”面板如图1.15所示。因为某些控件的属性较多,“属性”面板提供了两种管理属性和事件的方式,一种是按功能分类方式排序属性列表,一种是按字母方式排序属性列表。,1.3.6 熟悉“类视图”面板,“类视图”面板提供了观察类结构的非常直观的工具,“类视图”可以展现出程序类的内部结构,如图1.16所示。,1.3.7 熟悉“对象浏览器”面板,“对象浏览器”面板提供了查找程序集结构的工具,“对象浏览器”通过左边的树状菜单浏览相应的对象,选中某个对象,会在右上窗格显示对象的成员,在右下窗格显示选中元素的说明,如图1.17所示。,1.3.8 熟悉“代码编辑器”面板,“代码编辑器”面板提供了强大的代码编辑功能,是程序员最常接触的工具,如图1.18所示。,1.4 创建第一个C#控制台应用程序,对.NET Framework、C#和Visual Studio 2008有了初步了解以后,下面就开始C#编程之旅吧。可以通过C#创建控制台应用程序、Windows窗体应用程序,以及ASP.NET Web应用程序等,接下来笔者将通过一个控制台应用程序,带领读者快速体验C#的编程过程。,1.4.1 先睹为快-创建项目程序,【本节示例参考:源代码chapter11.4.1HelloCSharp】下面分步骤的来完成一个输出“Hello C#”的控制台应用程序。,1.4.2 庖丁解牛-认识项目结构,现在来认识一下上一节创建的项目,首先打开项目的保存路径,如图1.23所示。在Visual Studio中称之为解决方案文件夹。解决方案文件夹包含了整个项目的所有文件,通过解决方案文件有效地将各种资源组织起来,下面主要介绍几个文件的作用。HelloCSharp.csproj:csproj意为CSharp Project,即C#项目文件。C#项目文件以XML文件格式提供项目的各项资源信息,为解决方案资源管理器提供显示管理文件的信息,从而使用户每次继续开发任务时,都能够全身心地投入到项目和最终目标中,不会因开发环境而分散精力。HelloCSharp.sln:sln意为Visual Studio Solution,即解决方案文件。通过为环境提供对项目、项目项和解决方案项在磁盘上位置的引用,可将它们组织到解决方案中。HelloCSharp.suo:该文件记录所有将与解决方案建立关联的选项,以便在每次打开时,它都包含所做的自定义设置。,1.4.3 庐山真面目-认识C#程序,第一个控制台程序中,Program.cs文件程序如代码1-1所示。代码1-1 第一个控制台程序:Program.cs1using System;/引入命名空间2using System.Collections.Generic;3using System.Linq;4using System.Text;56namespace HelloCSharp/定义命名空间78 class Program/定义类9 10 static void Main(string args)/创建主函数11 12 Console.WriteLine(Hello C#);/控制台输出13 Console.ReadLine();/接受控制台输入14 15 16,1.5 获得帮助,在.NET平台下开发有个最大的好处就是,微软的帮助很全。读者可以在微软提供的MSDN帮助中找到任何需要的东西。追随微软不败的传奇,基于.NET的开发已占半壁江山,从事.NET开发的程序员越来越多,读者可以在网上找到众多的.NET程序员以求帮助,注册活跃的开发社区参与讨论。,1.5.1 Microsoft Visual Studio 2008 MSDN帮助系统,MSDN是Microsoft Software Developer Network的简称。这是微软的针对开发者的开发计划。你可以在看到有关软件开发的资料。也可以直接购买MSDN Library的光盘,在前面章节安装Visual Studio2008的同时,也安装了MSDN。MSDN包括C#等语言的帮助文件和许多与开发相关的技术文献,是学习C#最好的指导书和工具书。MSDN Library每个季度更新一次,可以向微软订阅更新光盘。如图1.25是MSDN中文站点,访问地址是:。通过访问站点,可以获得更新的开发信息。读者可以访问Microsoft开发者博客,跟一线开发人员直接交流,可以通过“How Do I”系列,学习视频教程,建议读者订阅MSDN邮件,这样可以很方便的收到自己感兴趣的最新文章和信息。,1.5.2 如何使用MSDN获得帮助,C#的帮助是以MSDN Library的方式提供的,即通过“F1”快捷键访问。MSDN中也包括大量的C#的文章和例子,对读者很有帮助。通常在以下情况使用帮助。1.获得学习帮助2.程序出错时,1.5.3 获得更多的帮助,万事开头难,学习C#也是一样,作为一个程序员,不仅仅需要学习技术,还需要了解业界动态,把握技术发展的脉搏;选择比努力更重要,要时刻保持清晰的思路和明确的方向。(1)是一个非常活跃的IT技术社区,每天都有最新的IT新闻,读者可以注册一个账户,参与讨论,了解业界动态,认识更多同行。(2)是Visual C#开发中心,在这里,总能找到许多有用的学习资料。(3)如果需要一点英语的帮助,可以去下载谷歌金山词霸合作版,这是金山与谷歌面向互联网翻译市场联合开发,适用于个人用户的免费翻译软件。不想安装程序的话,可以直接在网上找到许多在线翻译的网站,其中句酷()就是笔者比较喜欢的一个Web2.0网站。(4)当然,搜索是必须的,谷歌()和百度()都是最专业的搜索引擎,有时候读者会发现,百度知道()也能解决很多问题。,1.6 小结,学完本章后,读者应了解以下内容。(1)Microsoft.NET是一个开发平台,该平台具有两个主要组件:公共语言运行库(CLR)和.NET Framework 类库(FCL)。(2)C#是一种简单、现代、面向对象且类型安全的编程语言,C#相对于C/C+/Java具有更多的优秀特点。(3)Visual Studio是C#程序的集成开发环境(IDE),目前最新版本是Visual Studio 2008。本章带领读者熟悉了Visual Studio 2008常用的面板和工具。(4)在Visual Studio 2008下开发第一个控制台应用程序,理解应用程序的结构。(5)通过MSDN获取帮助,以及通过其他帮助方式更快更便捷地进行C#开发。,本章习题,一、选择题1以下语言,哪个不是面向对象编程语言()AJava B C C C+D C#2下列关于Microsoft.NET Framework说法不正确的是()AMicrosoft.NET Framework是一个平台,提供一个一致的面向对象编程环境B.NET Framework具有两个主要组件:公共语言运行库(CLR)和类库(FCL)C.NET Framework只支持C#语言D公共语言运行库为托管代码提供各种服务,如跨语言集成、代码访问安全性、对象生存期管理、调试和分析支持3()是独立于CPU 的指令集,它可以被高效地转换为特定于某种CPU 的代码。ACLR BCLS CMSIL DXML Web Service二、简答题1简述C#语言的特点。2简述编写一个控制台应用程序的步骤。,第2章 C#语法基础,在上一章里读者接触到了第一个C#应用程序,虽只是简单地在控制台输出了一句问候语,但它却充分体现了Visual Studio 2008的易用性及C#语言的特点。理解了C#的用途之后,就可以学习如何使用它。本章将介绍C#的基本语法知识,通过本章学习,读者将了解以下内容:理解C#中的数据类型。理解常量和变量的含义及用法。理解数据类型转换的含义。会运用常用的运算符和表达式。,2.1 C#数据类型,应用任何一种程序语言,需要充分了解它提供的数据类型,这样才能明白它的功能与限制,以便选择合适的数据类型来处理不同的数据。例如在平时生活中,我们会用整数来表达东西的数量,而在工程、金融领域我们要用到很高精度小数。但对计算机来说,数据的含义更要宽泛些,比如说一句话、一个字符等,对计算机来说都是数据。计算机会用不同的方式来处理它遇到的不同类型的数据。,2.1.1 通用类型系统简介,通用类型系统(Common Type System,CTS)是一个所有.NET语言都支持的数据类型的集合,它定义了如何在运行库中声明、使用和管理类型,确保这些语言可以相互传送数据,体现在.NET语言的互操作性。例如在C#中声明int类型的数据和在VB.NET中声明的Integer类型数据,实际上是通用类型系统中的System.Int32的一个实例。将数据类型内置于.NET Framework中的好处是,可以把所有的基本数据类型看作是支持某些方法的类,例如,要把int i转换成string,可以写如下代码:string str=i.toString();在C#语言里,有多种数据类型(Type)。根据数据产生时在内存中存放的方式,.Net将整个系统的数据类型分成两大类值类型和引用类型。值类型直接包含数据。每个值类型变量都包含有它自己的数据备份,因此对一个值类型变量的操作不会影响其他变量。引用类型包含指向对象实例的引用或指针。两个引用类型的变量可以指向同一个对象实例,因此对一个引用变量的操作会影响其他引用变量。可以通过下面一个例子来加深读者对值类型的引用类型的理解。,2.1.2 值类型,【本节示例参考:源代码chapter22.1.1ValueTypeExample】大多数编程语言都提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传递时被复制(也就是说,它们通过值来传递)。在.NET框架中,这些数据类型称为值类型。值类型通常是像整数这样的简单类型。C#中的值类型包含整数型、浮点型、布尔型、字符型等。表2.2列出了预定义的简单值类型。,2.1.3 引用类型,【本节示例参考:源代码chapter22.1.2RefTypeExample】引用类型的变量又称为对象,可存储对实际数据的引用。类似于在储物柜里存放的是该物品的地址信息。C#支持两个引用类型,如表2.4所示。,2.2 常量和变量,变量名表示一条信息的名称。其实在之前的程序代码中,已经接触到过变量,比如在上一节示例中使用到的a、b、c等,都是string类型的变量。变量的值在程序运行过程中可以改变。而常量是一旦定义好后,在程序运行过程中其值不变的量。,2.2.1 变量的声明和初始化,C#是一种“强类型”编程语言,在声明变量时必须指明它的数据类型。声明变量的作用之一是告诉编译器要为变量分配多少内存空间。就像要将一个物品存进储物间,应该事先让保管员知道,这个物品有多大,以便分配合适大小的储物柜。大了会浪费空间,小了东西放不下,会造成不必要的错误。声明变量的格式如下:数据类型 变量名;比如,下面的代码声明了一个int型的变量i:int i;变量声明后,可在程序运行中,给变量i赋值,或者可以在声明的时候给变量赋初值。一个变量声明以后可以多次赋值。在初始化时对变量赋值采用下面的格式:数据类型 变量名=初始值;double total=34.3D;,2.2.2 变量命名规范及编码规则,在C#中,对变量的命名有一些限制,包括以下规则:变量名必须以字母开头。变量只能有字母、数字、下划线。不能包含空格、标点等。且不能由数字开头。变量名不得与C#中的关键字同名。变量名不得与C#中的库函数同名。下面给出了一些合法和不合法的变量名:string 3str;/不合法,以数字开头float total count;/不合法,变量名包含空格int prod2;/合法double Main;/不合法,与Main函数同名double float;/因为float是关键字,不能用作变量名,2.2.3 变量的作用域,【本节示例参考:源代码chapter22.2.3ScopeExample】作用域(scope)是指由一个代码块或者语言结构约束起来的分层上下文。简单理解,变量的作用域指可以访问某个变量的代码区域。只有在变量被声明的代码块中,它才能被访问到,一旦程序执行超过某个代码块,则该代码块中声明的所有过程级变量都会越界,不能再被访问到。下面的示例演示了在变量的作用域外访问变量的情形:for(int i=0;i10;i+)Console.WriteLine(i);/i在这个循环里有效Console.WriteLine(last value of i in loop 0,i);/在循环外输出i的值会出错,2.2.4 声明和使用常量,常量就是值固定不变的量。在C#中,可以用const关键字来声明一个常量。在程序设计中,往往把一些经常用到而值不太可能改变的量定义为常量,而不是直接使用其数值。例如在计算和圆相关的问题时,就可以把圆周率定义常量。常量的声明方式如下:const int PI=3.14;/常量一旦声明,在程序运行中就不能再改变其值注意:和C+不同,在C#中,只能把局部变量和字体段(即类里面定义的变量)声明为常量。常量有如下特征:常量必须在声明时初始化。指定了其值后,就不能再修改了。常量值必须能在编译时用于计算。因皮,不能用从一个变量中提取的值来初始化常量。常量总是静态的(用static关键字修饰)。但事实上,在声明常量的时候不允许包含修饰符。如下面的一组定义:const int i;/错误,没有初始化const int i=3;/正确const int j=5*i;/正确,编译器知道i的值int p=3;const int q=p*4;/错误,不能用变量值来初始化常量,2.3 数据类型转换,所有值类型和引用类型都由一个名为object的基本类发展而来。在C#中还可以通过隐性转换(不会造成数据丢失)或显性转换(可能造成数据丢失或降低精确度)来改变数据类型。,2.3.1 装箱和拆箱,【本节示例参考:源代码chapter22.3.1BoxingExample】任何值类型、引用类型可以和object类型之间进行转换。装箱是值类型到object类型或到此值类型所实现的任何接口类型的隐式转换,拆箱是从object类型到值类型或从接口类型到实现该接口的值类型的显式转换。简言之,装箱就是将值类型转换为引用类型;反之,就是拆箱。如代码2-4所示,展示了一个简单的装箱拆箱操作。代码2-4 装箱和拆笨:BoxingExample.cs1int i=10;2object obj=i;/隐式装箱3object obj2=(object)i;/显式装箱4if(obj is int)/判断obj是否为int型56Console.WriteLine(OK);78Console.WriteLine(obj.GetType();/System.Int32,2.3.2 隐式类型转换,只要能保证值不会发生变化,类型转换就可以自动进行。如下面的一段代码:byte x=12;byte y=25;byte m=x+y;/错误int n=x+y;/正确该段代码先声明两个byte类型的数据,然后将这两个byte数据相加到另一个byte类型数据中,这步操作会提示错误,而将byte型数据相加到一个int型数据中,程序运行通过。这是因为,把两个byte值相加,应返回int型结果,而不是另一个byte。因为byte包含的数据只能有8个位的存储空间,即其值的范围只能在0255之间,所以把两个byte值相加,很容易得到一个不在这个范围里的数据。而用int型的数据来存储两个byte型数据相加的结果范围足够大,不会有数据丢失的危险。在这种情况下,编译器能顺利地通过转换,不用用户指定对数据的转换。,2.3.3 显式类型转换,使用显式类型转换,能够把一种基本数据类型转换成另一种基本数据类型。类型转换时把转换的目标类型名放在转换值之前的小括号里,例如:double x=12.5d;int i=(int)(x+1);将double型的x加上1转换成int型数据,赋给int型变量i,最后i的结果是13。在转换过程中,小数点后面的所有数据都丢失,损失了精度。读者需要注意,如果对这个double型的数据要进行多次运算,最好先不要进行转换,以免误差累积,造成更大的误差。在上一节的例子中,将byte型的x和y相加,其值会自动转换成int型的,如果用户非要让运算结果还是byte型,这时候也会要用到显式类型转换,如下面代码:byte x=12;byte y=18;byte m=(byte)(x+y);/显式类型转换,将int型的结果转换成byte型,2.4 运算符和表达式,C#提供大量运算符,这些运算符指定在表达式中执行哪些操作的符号。例如常见的+、-、*、/、=、!=、=、binary+、binary-、&、|、+、-和sizeof()等。此外,很多运算符可被用户重载,以便在应用到用户定义的类型时更改这些运算符的含义。表达式的运算符指示对表达式的数据进行什么样的操作。,2.4.1 算术运算符,C#中的算术运算符主要是对操作数进行基本的数学运算,包含+、-、*、/、%。其中%叫模式运算符,主要作用是给出除法运算的余数,如:7%2=1/表示7除2的余数是1这里要注意运算符+,它除了可以表示进行加法运算外,还可以实现字符串连接运算的功能。这实际上是对运算符的一个重载。例如在前面章节中的示例代码中有这样的代码段:string c=h;c+=ello;第二行代码等价于:c=c+ello;这里的运算符+实际上已不能叫做算术运算符了,而应该是一个字符串连接运算符,详细内容请参照第3章。,2.4.2 比较运算符,C#中的比较运算符有=、!、。C#比较运算符常用于判断某个条件是否成立。例如在前面的代码里有这样的代码段:string a=hello;string b=a;Console.WriteLine(a=b);/判断a和b是否相等。其返回结果为true或false在程序设计中,经常会根据某个变量的值来决定程序执行流程,在判断值的取值或取值范围时,就要用到比较运算符。详细内容可以参考第4章程序设计流程章节的知识。,2.4.3 条件运算符,【本节示例参考:源代码chapter22.4.3PriorityTest】条件运算符(也叫三元运算符或是三目运算符)是C#里唯一的一个三元运算符。它实际上是if-else结构的简写形式。它可以先判断一个条件,如果条件为真,就返回第一个值,如果条件为假,则返回第二个值。其语法格式如下:条件?值1:值2;假如有这样一个表达式:ab?1:0,2.4.4 赋值运算符,赋值运算符的作用,是将某个初始值或是经过运算的值赋给某个变量。C#里的赋值运算符有:=、+=、=、*=、/=、%=、&=、|=、=、=。除第一项外的其他赋值运算符都是简化的操作符,如x+=y,它等价于x=x+y。这种简化的操作符都需要两个操作数,用于执行算术、逻辑和接位运算,改变第一个操作数的值。,2.4.5 逻辑运算符,逻辑运算符有&、|、!、&、|。其中&和|执行按位的“与”和“或”,而和执行按位的“非”和“异或”。&和|执行布尔的“与”和“或”,而!执行布尔的“非”。读者要注意区分位运算和布尔运算。位运算是将运算的数据相应的二进制数据进行相应的计算。各种二进制数运算的结果如下表2.6所示。,2.4.6 表达式,表达式(expression)由操作数和运算符构成。表达式的运算符标明在操作数上运用了哪种操作。运算符可以是+、-、*、/等。操作数可以包括字面值、字段、局部变量和表达式。当表达式包括多个运算符时,运算符的优先级控制各个运算符执行