C#程序设计实用教程(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-08 20:10:32

点击下载

作者:谷涛主编

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

C#程序设计实用教程(第2版)

C#程序设计实用教程(第2版)试读:

第2版 前言

C#(C Sharp)作为微软公司专为.NET Framework 量身定做的编程语言,在Web系统、Web Service开发、桌面应用、类库及COM开发等多个领域,都显示了强大的功能。对于普通高等院校计算机科学与技术、网络工程、软件工程等专业的学生,掌握 C#开发技术将有助于满足目前软件开发、系统集成、Web 开发等领域的企业对于C#开发能力的要求,提高就业阶段自身的竞争力;与此同时,对于从事应用软件开发的从业人员或者将要进入该领域的初学者,掌握C#开发技术将有助于更快地完成易维护、高效率、运行稳定的系统的开发工作,并在开发的过程中体会到工作的乐趣。

本书遵循由浅入深、循序渐进的学习规律。所以,在开始本书的学习之前,读者可以不必有其他语言的学习使用经验。如果同学们在前期学习了其他高级语言,如C/C++、Java等,则可以更快速地掌握本书的重点。

本书从细节到整体,从内容编排到目录组织,都力图合理。在每一小节的内容编排上,首先给出清晰易懂的基本概念,然后试图挖掘更为深层的设计、编程和部署思想,最后通过独立而有趣的示例使读者学以致用。全书共分14章,在大多数章节中,将首先对基础知识进行介绍,然后重点讲解相关的实例。

第1、2、3、4章对C#的基础知识(包括C#与.NET的关系、C#语言的特点、基本语法、条件结构、循环判断等)进行了介绍。

第5章对C#的面向对象特性进行了介绍,读者可以从这一章中了解如何在C#中实现基本的面向对象特性,如封装、继承、多态等。

第6章讲解了C#的数组和集合的相关知识。

第7章介绍了C#的字符串和正则表达式的相关知识。

第8章是C#的界面编程,其中介绍了Windows窗体应用,重点讲解了几个常用窗体控件、菜单和GDI+绘图技术。

第9章讲解了文件操作的各种方法,重点是对文件流的理解,读者要学会对文件的读取、写入和删除操作。

第10章介绍了数据库技术应用,主要讲解了与 SQL Server 数据库的交互和XML技术的应用。

第11章介绍了C#新的数据库访问技术:LINQ,其中包括LINQ对数据集(Dataset)的操作,以及LinqDataSource控件实现数据的增、删、改。

第12章介绍了C#的Web网络应用。其中重点讲解了ASP.NET语法、内置对象和常用控件等。在该章最后,还以在线投票系统为例,深入剖析了 ASP.NET 的实际开发。

第13章讲解了WPF智能客户端,其中包括WPF的关键控件以及布局版式的应用方法。

第14章讲解了 Silverlight 交互式开发技术,使用该技术,可以让网页更加绚丽多彩,达到Flash的效果,读者要好好掌握。

本书在每章之后都配有习题,并且设计了上机指导,供上机实验和实践操作使用。

本书由天津工业大学的谷涛组织编写,其中谷涛编写了本书的第1~第5章,空军航空大学的扶晓编写了本书的第6~第8章,黑龙江广播电视大学的毕国锋编写了本书的第9~第14章。此外,参与本书整理、审校和代码调试的还有伍云辉、伍远明、戴艳、杜友丽、袁小艳、吴琼、赵红梅、周颖等,在此,编者对以上人员致以诚挚的谢意!本书中所有例题和相关代码都已调试通过,并制作了与本书配套的多媒体课件,供老师教学参考使用,可从人民邮电出版社教学服务与资源网(www.ptpedu.com.cn)上免费下载。

由于时间仓促和编者的水平有限,书中错误和不妥之处在所难免,敬请读者批评指正。编者2012年10月  第1章C#与.NET框架

自从微软公司进入.NET时代之后,互联网领域已经发生了很大的变化。.NET的目标是使任何人从任何地方、在任何时间、使用任何装置都能使用互联网上的服务。作为本书的开篇,首先介绍.NET及C#开发语言的基本知识。1.1 .NET框架简介

互联网从静态页面到能够与用户交互的动态页面,已经能够实现更强大的功能,现在的Web应用系统能够根据用户的要求动态处理数据,给用户提供个性化的服务。

在互联网模式中,信息被存储在 Web 服务器内,用户的各项请求都要通过服务器。但是现在的浏览器页面各自独立,互不相干,无法让不同的网页互相合作,传递有意义的信息,提供更深层次的服务。

于是,微软公司设想把整个互联网变成一个操作系统,用户在互联网上开发应用程序,使用互联网上的所有应用,就好像在自己的PC上一样,感觉不到是在互联网上。微软公司希望“CodeOnce,RunAnywhere”,即写好一个程序,然后能够将其应用到任何地方,这就是.NET的目标。整体上,.NET Framework如图1-1所示。

由图1-1可见,.NET Framework主要分为4个部分:通用语言开发环境、.NET基础类库、.NET开发语言Visual Studio.NET集成开发环境。图1-1 .NET Framework

1.通用语言开发环境(Common Language Runtime)

开发程序时,如果使用符合通用语言规范( Common Language Specification,CLS)的开发语言,那么所开发的程序将可以在任何有通用语言开发环境的操作系统(包括 Windows 95/98、Windows CE 及 Windows NT/2000/XP 等)下执行。

2..NET 基础类库(Basic Class Library)

.NET基础类库是一套函数库,以结构严密的树状层次组织,并由命名空间(Namespace)和类(Class)组成。其功能强大,使用简单,并具有高度的可扩展性。

3..NET开发语言

.NET 是多语言开发平台,所谓的.NET 开发语言指的是符合通用语言规范(Common Language Specification,CLS)的程序语言。目前微软公司提供 Visual Basic.NET、C#、C++以及 JScript.NET,其他厂商也提供了很多对.NET的语言支持,其中有APL、COBOL、Pascal、Eiffel、Haskell、ML、Oberon、Perl、Python、Scheme、Smalltalk等。

4.Visual Studio.NET 集成开发环境

Visual Studio.NET 集成开发环境是开发.NET 应用的利器,秉承了Microsoft IDE一贯的易用性,功能非常强大。1.2 C#与.NET 的关系

首先,来了解一下C#的诞生。C和C++一直是最有生命力的编程语言,这两种语言提供了强大的功能、高度的灵活性以及完整的底层控制能力;缺点是开发周期较长,学习和掌握这两种语言比较困难。而许多开发效率更高的语言,如 Visual Basic,在功能方面又有局限性。于是,在选择开发语言时,许多程序设计人员面临着两难的抉择。

针对这个问题,微软公司发布了称之为 C#(C Sharp)的编程语言。C#是为.NET 平台量身定做的开发语言,采用面向对象的思想,支持.NET最丰富的基本类库资源。C#提供快捷的开发方式,又没有丢掉 C 和 C++强大的控制能力。C#与 C 和 C++非常相似,熟悉 C 和 C++的程序设计人员能够很快掌握C#。C#的诞生汲取了目前所有开发语言的精华,其家谱如图1-2所示。图1-2 C#家谱1.3 C#的特点

C#是专门为.NET应用而开发的语言,是与.NET 框架的完美结合。在.NET 类库的支持下,C#能够全面地体现.NET Framework 的各种优点。总地来说,C#具有以下突出的优点。

1.语法简洁

C#源自C和C++。与之相比,C#最大的特色是不允许直接操作内存,去掉了指针操作。另外,C#简化了C++中一些冗余的语法,如“const”和“#define”,使语法更加简洁。

2.彻底的面向对象设计

C#是彻底的面向对象语言,每种类型都可以看作一个对象。C#具有面向对象语言所应有的一切特征,包括封装、继承和多态,并且精心设计。C#极大地提高了程序设计人员的效率,缩短了开发周期。读者在学习和实践中,定会感受到这一点。

3.与Web应用紧密结合

C#与Web紧密结合,支持绝大多数的Web标准,如HTML、XML、SOAP等。利用简单的C#组件,程序设计人员能够快速地开发Web服务,并通过Internet使这些服务能被运行于任何操作系统上的应用所调用。

4.强大的安全机制

C#具有强大的安全机制,可以消除软件开发中许多常见错误,并能够帮助程序设计人员尽量使用最少的代码来完成功能,这不但减轻了程序设计人员的工作量,同时有效地避免了错误的发生。另外,.NET提供的垃圾回收器能够帮助程序设计人员有效地管理内存资源。

5.完善的错误、异常处理机制

对错误的处理能力的强弱是衡量一种语言是否优秀的重要标准。在开发中,即使最优秀的程序设计人员也会出现错误。C#提供完善的错误和异常触发机制,使程序在交付应用时更加健壮。

6.灵活的版本处理技术

在大型工程的开发中,升级系统的组件非常容易出现错误。为了处理这个问题,C#在语言本身内置了版本控制功能,使程序设计人员更加容易地开发和维护各种商业应用。

7.兼容性

C#遵守.NET的通用语言规范,从而保证能够与其他语言开发的组件兼容。1.4 Visual Studio 2010

本书主要使用Visual Studio.NET(后面简称为 VS.NET)作为开发环境,所以需要首先介绍一下这个集成开发工具(IDE)。VS.NET 是一个非常复杂、庞大的产品,但其秉承了微软公司开发环境的一贯风格,使用起来非常简单。在正确地安装配置之后,启动VS.NET,如图1-3所示。

VS.NET具有以下最基本的功能。(1)把光标放在隐藏的窗口上,便会自动弹出这些窗口。(2)“工具箱”窗口显示常用的窗体控件,通过简单的拖曳操作,可以快速开发图形化界面工程。(3)“解决方案资源管理器”窗口显示当前解决方案的信息(解决方案即一个或多个工程及其配置的综合),窗口中可以查看解决方案中工程的各种视图,如其中的文件等。(4)“属性”窗口显示工程内容更详细的信息,可以对工程中的单个控件或其他对象进行配置。例如,可以使用“属性”窗口改变Windows工程中一个按钮的外观、大小等。(5)“任务列表”窗口和“输出”窗口显示编译工程时的信息,以及开发环境已经完成的任务。图1-3 VS.NET 2010 启动界面1.5 第一个C#程序:Hello World

上面两小节介绍了.NET Framework 和 C#的基本知识。本节将带领读者实现一个最简单的应用:Hello World。1.5.1 第一个Windows控制台应用程序

.NET 可以实现多种应用,包括控制台程序、Windows Form 程序以及 Web 应用。首先来实现最简单的控制台程序:Hello World。实现步骤如下所述。(1)启动VS.NET。(2)单击主窗口上“新建项目”命令,或者单击“文件”|“新建”|“项目”命令。(3)弹出“新建项目”对话框,如图 1-4 所示。在左侧“已安装的模板”中选择“Visual C#”项目,在右侧“模板”中选择“控制台应用程序”,在“名称”输入框中输入“HelloWorld_Console”,通过单击“浏览”按钮,选择工程所在的目录,单击“确定”按钮。最后,把“为解决方案创建目录”前复选框中的勾去掉。(4)查看“解决方案资源管理器”面板,如图1-5所示。右击“Programe.cs”文件,在打开的菜单中单击“重命名”命令,将其改名为“HelloWorld.cs”。(5)查看主窗口,里面应该有VS.NET自动生成的代码,如下所示:

1. using System;

2. using System.Collections.Generic;

3. using System.Text;

4.

5. namespace HelloWorld_Console

6. {

7.  class Program

8.  {

9.  static void Main(string[] args)

10.  {

11.  }

12. }

13. }图1-4 “新建项目”对话框图1-5 HelloWorld_Console 的资源管理器窗口

在第7行,将“class Program”改为“class HelloWorld”;在第10~11行中间,添加如下代码:

Console.WriteLine("Hello World, Console Application.");

Console.ReadLine();(6)按快捷键“Ctrl+F5”,或者单击“调试”|“开始执行”命令,启动程序,运行结果如图1-6所示。图1-6 HelloWorld_Console 运行结果(7)查看工程文件。在目录“D:\示例代码\C01”下,将会发现文件夹“HelloWorld_Console”,这是VS.NET为本工程所建立的工程文件夹。进入后发现会包含许多文件,此处需要了解下面的文件。

●HelloWorld_Console.sln:解决方案文件,后缀“sln”为solution缩写,双击可以打开本工程。

●HelloWorld.cs:工程代码文件,后缀“cs”为 C Sharp 的缩写,并非 Counter-Strike。

●在子目录“\bin\Debug”下,可以发现可执行文件“HelloWorld_Console.exe”,双击可以执行。(8)如果想关闭解决方案,可单击“文件”|“关闭解决方案”命令。

至此,第一个Windows控制台应用就完成了。1.5.2 第一个Windows窗体应用程序

本小节介绍如何在Windows图形化界面应用中实现Hello World。实现步骤如下。(1)启动VS.NET。(2)单击主窗口上“新建项目”命令,或者单击“文件”|“新建”|“项目”命令。(3)弹出“新建项目”对话框。在左侧“项目类型”中选择“Visual C#项目”,在右侧“模板”中选择“Windows应用程序”,在下侧“名称”输入框中输入“HelloWorld_WinForm”,并通过单击“浏览”按钮,选择工程所在目录“D:\示例代码\C01”;单击“确定”按钮。(4)查看“解决方案资源管理器”窗口,如图1-7所示。右击“Form1.cs”文件,在弹出的菜单中单击“重命名”命令,将其改名为“HelloWorld.cs”。图1-7 资源管理器窗口(5)查看主窗口,里面有一个自动生成的窗体 From1。单击该窗体,然后单击右侧“属性”面板,该面板如图1-8所示。修改Name 属性为“frmHelloWorld”,修改 Text 属性为“Hello World!”。(6)单击主窗口左侧的“工具箱”面板,出现一些Windows控件,如图1-9所示。(7)双击“Label”控件,或者单击后按住左键将其拖曳至主窗口的窗体中,并修改其属性。图1-8 Form1的“属性”窗口图1-9 Windows Form工具箱

●Name:lblDisplay。

●Text:空。

●BackColor:Window。(8)双击“Button”控件,或者单击后按住左键将其拖曳至主窗口的窗体中,并修改其属性。

●Name:btnShow。

●Text:“显示”。

最后效果如图1-10所示。(9)双击“显示”按钮,将进入代码窗口(通过主窗口上侧的标签可以在代码窗口和窗体窗口间进行切换),可以看到VS.NET已经自动生成了很多代码,在此不必关心。(10)进入代码窗口后光标自动位于方法“btnShow_Click()”内部(即单击“显示”按钮会触发这个方法),在光标处添加如下代码:

this.lblDisplay.Text="Hello World, WinForm Application.";(11)按快捷键“Ctrl+F5”,或者单击“调试”|“开始执行”命令,启动程序后,单击“显示”按钮,在标签中就会出现如图1-11所示的结果。图1-10 添加Label和Button后的窗体图1-11 HelloWorld_WinForm运行结果(12)查看在目录“D:\示例代码\C01”下的工程文件,将会发现文件夹“HelloWorld_WinForm”。

至此,第一个 Windows Form 应用就完成了。1.5.3 第一个ASP.NET应用程序

前面两个应用都是Windows应用,下面介绍使用C#实现的Web应用,即ASP.NET程序。后面第9章会详细讲解,此处先举个示例。本例实现步骤如下。(1)启动 Visual Studio.NET 2010。(2)单击主窗口上的“新建项目”链接,弹出“新建网站”对话框。(3)选择“ASP.NET网站”项,在下侧“位置”下拉框中选择“文件系统”,然后输入“D:\示例代码\HelloWorld_ASPNET”。在“语言”下拉框中选择“Visual C#”,如图 1-12 所示。图1-12 新建ASP.NET 网站(4)单击“确定”按钮,等待 Visual Studio.NET 创建新的工程成功。(5)查看IDE中的“解决方案资源管理器”面板,右击“Default.aspx”文件,在弹出的菜单中单击“重命名”命令,将其改名为“HelloWorld.aspx”。(6)查看主窗口,里面有一个自动生成 aspx 页面,单击页面左下方的“源”标签,然后将代码

<title>无标题页</title>

改为<title> Hello World,ASPNET.</title>。(7)在页面显示时,页面的标题将为“Hello World,ASPNET.”。(8)单击页面左下方的“设计”标签,然后单击主窗口左侧的“工具箱”面板,默认出现标准Web控件。双击“Label”控件,修改其属性。

●ID:lblDisplay。

●Text:空。

●BackColor:Silver。

同样地,双击“Button”控件,并修改其属性。

●ID:btnShow。

●Text:“显示”。

最后效果如图1-13所示。(9)双击“显示”按钮,进入代码窗口(通过主窗口上侧的标签可以在代码窗口和窗体窗口间进行切换),可以看到 Visual Studio.NET 已经自动生成了很多代码。进入代码窗口后光标自动位于方法“btnShow_Click ()”内部(即单击“显示”按钮,会触发这个方法),在光标处添加如下代码:

this.lblDisplay.Text="Hello World, ASP.NET.";(10)在“资源管理器”中,右击“HelloWorld.aspx”文件,在弹出的快捷菜单中选择“设为起始页”命令。(11)按快捷键“Ctrl+F5”启动程序,单击“显示”按钮,在标签中就会出现如图1-14所示的结果。图1-13 添加Label和Button后的aspx页面图1-14 HelloWorld_ASPNET运行结果(12)查看在目录“D:\示例代码\C01”下的工程文件,将会发现工程文件夹“HelloWorld_ASPNET”。其中:

●.aspx:页面文件。

●.cs:代码文件。

至此,第一个ASP.NET Web应用就完成了。小结

本章主要介绍了C#与.NET框架的基本知识,并且使用开发工具 Visual Studio 2010 创建了 3种不同类型的应用程序示例。通过本章的学习,读者可以初步了解C#语言和.NET框架,以及使用 Visual Studio 2010 创建简单的应用程序。习题

1-1 .NET 的目标是什么?.NET 能做什么?

1-2 简述 C#与.NET 的关系。

1-3 简述C#的特点。上机指导

.NET可以实现多种应用,包括控制台程序、Windows Form 程序以及 Web 应用。开发这些应用程序时,绝大多数程序设计人员或者团队都会选择微软公司的集成开发环境 Visual Studio 2010。实验一 Windows控制台应用程序

实验内容

本实验主要使用 Visual Studio 2010 开发一个 Windows 控制台应用程序,输出一个简单的字符串“Hello Tom”。效果如图 1-15 所示。图1-15 HelloTom_Console运行结果

实验目的

能够使用Visual Studio 2010工具开发简单的Windows控制台应用程序。

实验思路

在 1.5.1 小节中介绍了如何了使用 Visual Studio 2010 开发 Windows 控制台应用程序,输出一个简单的字符串“Hello World”。根据这个设计思路,修改一下输出的字符串,就可以输出所需要的结果“Hello Tom”。实验二 Windows窗体应用程序

实验内容

本实验主要使用Visual Studio 2010 开发一个 Windows 窗体应用程序,输出一个简单的字符串“Hello Tom”。效果如图 1-16 所示。图1-16 HelloTom_WinForm运行结果

实验目的

能够使用 Visual Studio 2010 工具开发简单的 Windows 窗体应用程序。

实验思路

在1.5.2小节中介绍了如何使用 Visual Studio 2010 开发 Windows 窗体应用程序,输出一个简单的字符串“Hello World”。根据这个设计思路,修改一下输出的字符串,就可以输出所需要的结果“Hello Tom”。实验三 ASP.NET应用程序

实验内容

本实验主要使用 Visual Studio 2010 开发一个 ASP.NET 应用程序,输出一个简单的字符串“Hello Tom”。效果如图 1-17 所示。图1-17 HelloTom_ASPNET运行结果

实验目的

能够使用 Visual Studio 2010 工具开发简单的 ASP.NET 应用程序。

实验思路

在1.5.3小节中介绍了如何了使用 Visual Studio 2010 开发 ASP.NET 应用程序,输出一个简单的字符串“Hello World”。根据这个设计思路,修改一下输出的字符串,就可以输出所需要的结果“Hello Tom”。  第2章C#语法基础

C#的语法设计有很多地方与 C/C++相似。本章介绍 C#程序设计基础知识,包括数据类型、常量和变量、类型转换、运算符和语句结构。2.1 数据类型

.NET Framework 是一种跨语言的框架。为了在各种语言之间交互操作,部分.NET Framework 指定了类型中最基础的部分,这称为通用类型系统(Common Type System,CTS)。

C#支持CTS,其数据类型包括基本类型(类型中最基础的部分),如int、char、float等,也包括比较复杂的类型,如string、decimal等。作为完全面向对象的语言,C#中的所有数据类型是一个真正的类,具有格式化、系列化以及类型转换等方法。根据在内存中存储位置的不同,C#中的数据类型可分为以下两类。

●值类型:该类型的数据长度固定,存放于栈内。

●引用类型:该类型的数据长度可变,存放于堆内。2.1.1 值类型

C#内置的值类型是最基本的数据类型,例如整数、浮点数、字符、布尔类型等。

1.整数类型

C#支持8种整数类型,具体含义如表2-1所示。表2-1 整数类型

2.浮点数类型

C#支持3种浮点数类型,如表2-2所示。表2-2 浮点数类型

3.布尔型

C#的布尔型是bool,其取值包括True和False,如表2-3所示。表2-3 布尔型

在C#中,bool类型的数据和整数不能互相转换,即如果声明变量为bool型,就只能对其赋值为True或False,而不能使用1或者0。这与C和C++不同。

4.字符型

C#的字符型可以保存单个字符的值,如表2-4所示。表2-4 字符型

在C#中,char 类型的值需要放在单引号中,例如 'A'。另外,对于一些特殊的字符,例如单引号,可以通过转义字符来表示。C#中的转义字符如表2-5所示。表2-5 C#转义字符

5.结构

除去上面介绍的简单值类型之外,用户还可以定义复合值类型。常用的复合值类型包括结构和枚举。首先来看结构。

一个结构(struct)是包含多个基本类型或复合类型的统一体。在C#中可以使用struct关键字创建结构,例如,一个学生信息结构如下:

1. /// <summary>

2. ///学生信息结构

3. /// </summary>

4. public struct Student

5. {

6.  public long Sid;  //学号

7.  public string SName; //姓名

8.  public double Score; //成绩

9. }

在这里使用了结构,而不是类,这是因为与类相比,结构有如下的优点。

●结构占用栈内存,对其操作的效率要比类高。

●结构在使用完后能够自动释放内存分配。

●结构很容易复制,只需要使用等号就可以把一个结构赋值给另一个结构,如下例所示(而类是不能够这样做的):

1. Student s1=new Student();

2. Student s2;

3.

4. s1.Sid=1;

5. s1.SName="张三";

6. s1.Score=80;

7.

8. s2=s1;

6.枚举

枚举(enum)其实是一个整数类型,用于定义一组基本整数数据,并可以给每个整数指定一个便于记忆的名字。以下代码声明了一个星期枚举类型:

1. /// <summary>

2. ///星期枚举

3. /// </summary>

4. public enum enumWeek

5. {

6.  Sunday=0,

7.  Monday=1,

8.  Tuesday=2,

9.  Wedensday=3,

10.  Thursday=4,

11.  Friday=5,

12.  Saturday=6

13. }

建立这个星期枚举之后,便可以使用名称来表示特定的整数值,例如,Week.Monday即代表整数1。下面是一个使用Week枚举的示例代码:

1. int i=0;

2. switch(i)

3. {

4.   case (int) enumWeek.Sunday:  //返回0

5.    Console.WriteLine("菲菲的生日");

6.    break;

7.   case (int) enumWeek.Monday:  //返回1

8.    //...

9. }

从长远来看,在编程中创建枚举可以节省大量时间,因此要适当地使用枚举。2.1.2 引用类型

C#不允许在安全代码中使用指针,因此要处理堆中的数据就需要使用引用数据类型,使用new关键字实例化引用数据类型的对象,并指向堆中的对象数据。例如:

Obj1 = new Obj();

Obj1即指向堆中的 Obj 对象。对象的使用方法将在第3章详细介绍,此处,首先了解一下C#中内置的一些引用数据类型。

1.内置引用类型

C#支持两个预定义的引用类型,如表2-6所示。表2-6 C#中的预定义引用类型

其中:

●object类型是C#所有数据类型的基类型,具有一些通用的方法,如Equal()、GetHashCode()、GetType()以及ToString()。

●String 类型可以方便地处理字符串操作,该类型的值需要放在双引号中。有许多非常好用的方法可用来完成如字符串连接、字符定位、子串定位等操作。

2.数组

C#把数组看作一个带有方法和属性的对象,并存储在堆内存中。同C语言风格类似,声明数组时,要在变量类型后面加一组方括号。例如下面语句定义一个整数数组:

int[] nVar;

这里只是定义了数组变量nVar,并没有初始化,即并没有为其开辟内存空间。若要初始化特定大小的数组,需要使用new关键字,如下所示:

int[] nVar=new int[100];

同C语言一样,C#使用下标来引用数组元素,其下标从0开始。另外,C#还可以使用数组的实例来初始化数组,如 int[] nVar={0,1,2,3}等价于:

int[] nVar=new int[] {0,1,2,3};

数组作为一个对象,有自己的属性和方法,常用的属性如下。

●.Length:一维数组的长度。

●.Rank:数组的维数。

常用的方法是.GetLength(int dimension),用来获取多维数组中指定维的长度。

3.类、接口

类在 C#和.NET Framework 中是最基本的用户自定义类型。类也是一种复合数据类型,包括属性和方法。本书将在第3章对其进行详细介绍。

接口用于实现一个类的定义,包括属性、方法的定义等,但没有具体的实现,也不能实例化接口。接口将在第3章详细讨论。2.2 变量和常量

变量是用来描述一条信息的名称,在变量中可以存储各种类型的信息。举一个简单的例子来说明数据和变量的关系,假设某人身高是180cm,那么“180”便是数据,而“身高”是变量。可以说“身高增加 1”,即对变量进行操作,这时“身高”将改变为“181”,而不会说“180增加1”。2.2.1 变量

在C#中,使用变量的基本原则是:先定义,后使用。C#中的变量命名规范如下:(1)必须以字母或下画线开头;(2)只能由字母、数字、下画线组成,不能包含空格、标点符号、运算符,以及其他符号;(3)不能与C#关键字(如class、new等)同名。

需要注意的是,C#中的变量名可以以“@”作为前缀,这时就可以使用“@”+关键字作为变量名,如“@class”。但是,“@”本身并不是变量名的一部分,例如在本例中,真正的变量名仍然是“class”。

下面是一些合法的变量命名示例:

1. int i;

2. string error_message;

3. char @new;

下面是一些不合法的变量命名示例:

1. int No.1;  //不能包含标点符号

2. char 1_new;  //以数字开头

3. string static; //与关键字同名

变量的声明非常简单,只需要在数据类型后面加上变量名即可,如:

1. int i;

2. string s1,s2;

另外,还可以使用变量类型关键字(如“static”)来定义变量的类型。2.2.2 常量

同变量一样,常量也用来存储数据。它们的区别在于,常量一旦初始化就不再发生变化,可以理解为符号化的常数。使用常量可以使程序变得更加灵活易读,例如,可以用常量 PI 来代替3.1415926,一方面程序变得易读,另一方面,需要修改 PI 精度的时候无需在每一处都修改,只需在代码中改变PI的初始值即可。

常量的声明和变量类似,需要指定其数据类型、常量名,以及初始值,并需要使用 const 关键字,例如:

[public] const double PI=3.1415;

其中,[public]关键字可选,是常量的作用域,并可用private,protected,internal或new代替。这5个关键字的含义如下。

●public:全局常量。

●private:局部常量。

●protected:受保护常量。

●internal:可在同一个链接库中访问。

●new:创建新常量,不继承父类同名常量。

声明常量并赋值后,就可以通过直接引用变量名来使用它,代码如下:1. double r=3.2;

2. double area=PI*r*r;

3. Console.WriteLine(area);2.3 类型转换

在高级语言中,数据类型是很重要的一个概念,只有具有相同数据类型的对象才能够互相操作。很多时候,为了进行不同类型数据的运算(如整数和浮点数的运算等),需要把数据从一种类型转换为另一种类型,即进行类型转换。C#有两种转换方式。

●隐式转换:无需指明转换,编译器自动将操作数转换为相同的类型。

●显式转换:需指定把一个数据转换成其他类型。2.3.1 隐式转换

当两个不同类型的操作数进行运算时,编译器会试图对其进行自动类型转换,使两者变为同一类型。但是,从2.1.1小节可以看出,不同的数据类型具有不同的存储空间,如果试图将一个需要较大存储空间的数据转换为存储空间较小的数据,就会出现错误。例如:

1. int result;

2. long val1=1;

3. long val2=2;

4. result=val1 + val2;

将会出现错误:无法将类型“long”隐式转换为“int”。

C#支持的隐式类型转换如表2-7所示。表2-7 C#支持的隐式类型转换2.3.2 显式转换

显式类型转换又叫做强制类型转换。在有些情况下,编译器不能够隐式转换数据类型,例如下面的代码就无法隐式转换:

1. int result;

2. long val1=1;

3. long val2=2;

4. result=val1 + val2;

但由于某种原因,程序设计人员必须要进行这样的操作,那么,这时就需要显式转换数据类型,强迫编译器进行转换。简单数据类型转换的一般语法如下所示:

nval1=(int)val1;

即把所要转换的目的数据类型放在圆括号内,并置于源数据之前。

另外,复杂的数据类型,如类、结构等,往往具有类型转换的方法,相关内容将在第3章详细介绍。2.3.3 装箱和拆箱

前两个小节介绍了数据类型的转换。在下面的代码中:

1. int i=10;

2. string s=i.ToString();

i是一个值类型数据,存放在栈内存中;s是一个引用类型的String对象,存放在堆中。要进行它们之间的转换,需要使用封箱(boxing)和拆箱(unboxing)来实现,具体的方法如下。(1)封箱:把值类型转换为引用类型,可以隐式转换,代码如下:

1. int i=0;

2. object o=i;(2)拆箱:把引用类型转换为值类型,需显式转换。代码如下:

1. object o=new onbject();

2. int j=(int)o;2.4 运算符

C#中的运算符是用来对变量、常量或数据进行计算的符号,指挥计算机进行某种操作。可以将运算符理解为交通警察的命令,用来指挥行人或车辆等不同的运动实体(运算数),最后达到一定的目的。例如“+”是运算符,而“2+3”完成两数求和的功能。2.4.1 算术运算符

算术运算符(arithmetic operators)用来处理四则运算的符号,是最简单、最常用的符号,尤其数字的处理几乎都会使用到算术运算符。C#中的算术运算符如表2-8所示。表2-8 C#的算术运算符2.4.2 字符串运算符

字符串运算符(string operator)只有一个,就是加号“+”。它除了作为算术运算符之外,还可以将字符串连接起来,变成合并的新字符串。示例代码如下:

1. string s="Hello";

2. s=s+", World.";

3. Console.WriteLine(s); //输出:Hello, World.2.4.3 赋值运算符

赋值运算符(assignment operator)把其右边表达式的值赋给左边变量或常量。C#中的赋值运算符如表2-9所示。表2-9 C#中的赋值运算符

使用上面的赋值运算符往往可以使代码更为简洁,而且更重要的是能够比先运算再赋值具有更高的执行效率。2.4.4 逻辑运算符

逻辑运算符(logical operators)通常用来测试真假值。C#中的逻辑运算符如表 2-10 所示。表2-10 C#中的逻辑运算符2.4.5 位运算符

位运算符(bitwise operators)用于进行一些快速的数字运算,共有 6 个,如表 2-11 所示。表2-11 C#的位运算符2.4.6 其他运算符

除上面5种运算符之外,C#还包括一些特殊的运算符。其使用和意义如表2-12所示。表2-12 C#的其他运算符2.4.7 运算符的优先级

运算符的优先级是指在表达式中哪一个运算符应该首先计算。算术中四则运算时“先乘除,后加减”便是运算符优先级的很好体现。

C#根据运算符的优先级确定表达式的求值顺序:优先级高的运算先做,优先级低的操作后做,相同优先级的操作从左到右依次做,同时用小括号控制运算顺序,任何在小括号内的运算最优先进行。表2-13所示为C#运算符的优先级。表2-13 C#运算符的优先级

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载