C#初学者指南

978-7-115-35290-3
作者: 【加拿大】Jayden Ky
译者: 李强吴戈
编辑: 陈冀康
分类: C#

图书目录:

详情

本书是一本初学者指南。然而,它并不是讲授.NET开发框架的每一项技术,相反,本书介绍了最为重要的C#和.NET框架编程知识,掌握了这些基础知识,读者可以轻松地自行进入深入学习。本书包括的主题有C#编程语言、C#面向对象编程、.NET框架类库等等。本书适合C#语言的初学者、计算机或相关专业的大学生阅读学习。

图书摘要

版权信息

书名:C#初学者指南

ISBN:978-7-115-35290-3

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    [加] Jayden Ky

  译    李 强  吴 戈

  责任编辑 陈冀康

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


Simplified Chinese translation copyright ©2014 by Posts and Telecommunications Press ALL RIGHTS RESERVED

C#: A Beginner’s Tutorial, by Jayden Ky

Copyright © 2013 Brainy Software Inc.

本书中文简体版由Brainy Software Inc. 授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


C#是一种简单易学的、成熟的编程语言,作为.NET Framework的一部分,C#语言得到非常广泛的应用。

本书是一本C#语言的初学者的教程,涵盖了C#和.NET Framework语言中最重要的主题。全书共包括16章和3个附录,依次介绍了 C#程序语言、面向对象编程和.NET Framework类库3个方面的知识和技术。附录部分简单介绍了Visual Studio Express和SQL Server Express等常用工具。

本书内容全面,示例丰富,浅显易懂,可以帮助读者掌握C#编程基础知识,以完成中级C#程序员的日常任务。本书适合C#语言初学者和对C#编程感兴趣的读者阅读,也可以作为相关专业的教学参考书或培训教材。


欢迎阅读本书。

C#(读作“c sharp”)是一种易学的、成熟的编程语言。同时,它也是.NET Framework 的一部分。.NET Framework是很大的一个技术集合,它包罗万象,以至于初学者往往不知从何入手。如果你也是一名初学者,那么本书非常适合你,因为本书就是专门为.NET初学者所编写的教程。

作为初学者的教程,本书并不会介绍.NET Framework中的每一种技术。相反,本书涵盖C#和.NET Framework 语言中最重要的主题,掌握了这些内容,你才能够自学其他的技术。但是本书的内容很全面,在完全理解各章的内容后,你就能很好地完成中级C#程序员的日常任务。

本书介绍了以下三个主题,它们是专业的C#程序员必须要掌握的。

设计一门高效的C#课程,其困难之处就在于,这三个主题实际上是彼此相关的。一方面,C#就是OOP语言,所以如果你已经了解OOP,那么学习C#的语法就较容易。另一方面,诸如继承、多态、数据封装等OOP的特性,我们最好是用真实案例来讲解。可是,理解真正的C#程序,却需要我们具有.NET Framework类库的知识。

因为这三个主题相互依赖,所以我们不能把它们划分为三个独立的部分。相反,讨论一个主题的章节会和讨论另一个主题的章节交织在一起。例如,在介绍多态之前,本书要确保我们已经熟悉某些.NET Framework的类,以便能给出真实的案例。另外,如果不能很好地理解一组特定的类,我们就很难理解泛型这样的语言特性,而这组特定的类又是在讨论完支持类后才介绍的。

本书中也会有一个主题在两三个地方重复出现的情况。例如,for和while循环语句是一个基本的语言特性,应该在前边的章节中介绍它。用foreach循环遍历一个数组或集合,却只能在介绍过数组和集合类型后再讲解。因此,循环语句首先会出现在第3章,然后在第5章介绍数组和第13章介绍集合时,会再次出现。

本前言接下来的内容会给出.NET Framework的高级概述、OOP的介绍、每章的简单介绍以及.NET Framework的安装指南。

.NET Framework是一种编程环境的常用名称,其规范的叫法为通用语言基础架构(Common Language Infrastructure,CLI)。CLI是微软开发的并且通过了ISO和ECMA的认证标准。ISO和ECMA都是国际标准化机构。

.NET Framework引人注目的地方之一,就是支持多种编程语言。实际上,最新的统计结果表明,有超过30种语言可以使用.NET Framework,包括Visual Basic、C#和C++。这就意味着,如果习惯于使用Visual Basic,可以继续用这种语言编程。如果你是一名C++程序员,也不必为了充分利用.NET Framework所提供的优势而去学习一种新的语言。

但是,多语言支持并不是.NET Framework的唯一特性。它还提供了一整套技术,使软件开发更迅速且应用程序更加健壮和安全。多年来,.NET Framework成为首选的技术,因为它具有以下优点。

.NET Framework不像传统的编程环境。在传统的编程中,源代码要编译成可执行代码。这个可执行代码对于目标平台来说是本地的,因为它只能在原计划运行的平台上运行。换句话说,在Windows上编写和编译的代码,只能在Windows上运行;在Linux上编写的代码,只能在Linux上运行,依次类推,如图I-1所示。

图I-1 传统的编程范式

相反,.NET Framework程序则编译成通用中间语言(Common Intermediate Language,CIL,读作“sil”或“kil”)代码。如果你熟悉Java,CIL代码相当于Java的字节码。CIL代码此前叫作微软中间语言(Microsoft Intermediate Language)或MSIL代码,只能运行在公共语言运行时(Common Language Runtime,CLR)上。CLR是解释CIL代码的一个本地应用程序。因为CLR可用于多个平台,同样的CIL代码也变成了跨平台的代码。如图I-2所示,我们可以用支持的任何语言编写一个.NET程序并且把它编译成CIL代码。同样CIL代码可以运行在任意已经开发了CLR的操作系统上。除了CIL代码以外,.NET编译器还生成了元数据以描述CIL代码中的类型。这个元数据在术语上叫作清单(manifest)。把CIL代码和相应的清单一起打包成一个.dll或.exe文件,叫作程序集。

图I-2 .NET编程模型

目前,微软提供了CLR针对Windows的实现,但是随着来自Project Mono(http://www.mono-project.com )和DotGNU Portable.NET(http://dotgnu.org/pnet.html)的其他实现,CIL代码已经能够在Linux、Mac OS X、BSD、Sony PlayStation 3和Apple iPhone上运行了。

.NET术语中把只能在CLR之上运行的代码称为托管代码(Managed code)。另一方面,一些.NET语言,诸如C#和C++,既可以生成托管代码又可以生成非托管代码。非托管代码运行在运行时之外。本书只介绍托管代码。

当用C#或其他.NET语言编程时,我们总是使用通用类型系统(Common Type System,CTS)来工作。在解释CTS前,我们要确定你已经了解了什么是类型。那么,什么是类型呢?在计算机编程中,类型决定了值的种类,例如一个数字或一段文本。对于编译器来说,类型信息特别有用。例如,它使得的3*2这个乘法运算有意义,因为3和2都是数字。但是,我们如果在C#代码中写下VB *C#,编译器将认为它无效,因为不能把两段文本相乘,至少,在C#中不允许这样做。

CTS中有5种类型。

在本书中,我们会逐一介绍这些类型。

OOP通过对真实世界中的对象建模应用来工作。OOP有三种主要特性:封装、继承和多态。

OOP的好处是很实际的。这也是为什么包括C#在内的大部分现代编程语言都是OO的。我们甚至可以引用为了支持OOP而进行语言转换的两个著名的例子:C语言演变成了C++,而Visual Basic则升级为Visual Basic.NET。

本节介绍OOP的好处并且对学习OOP的难易程度给出一个评估。

OOP的优点包括代码易维护、代码可复用和可扩展性。下面,我们对这些优点作更详尽的介绍。

1.易维护

当前的应用软件往往非常大。很久以前,一个“大”系统包含几千行代码。而现在,甚至100万行代码都不算是大系统。当系统变得更大的时候,就开始产生一些问题。C++之父Bjarne Stroustrup曾经说过类似于下面的话。小程序可以随便写,即使不是很容易,但最终你还是能让它工作。但是,大程序却截然不同。如果你没有使用“好的编程”技术,新的错误会随着你修正老错误的步伐而不断地产生。

原因就在于,一个大程序的不同部分会相互影响。当我们修改程序的某一部分内容时,可能不会意识到这种变化可能会影响到其他部分。OOP使应用程序更容易模块化,而且模块化使得维护不再头疼。模块化在OOP中是内在的,因为类(它是对象的模板)本身就是一个模块。好的设计应该允许一个类包含相似的功能和相关的数据。在OOP中,一个经常用到的重要的相关术语是耦合,它表示两个模块之间有一定程度的交互。各部分之间的松耦合使得代码更容易实现复用,而复用是OOP的另一个优点。

2.可复用性

可复用性意味着,如果对于最初编写的代码有相同的功能需求,那么代码的编写者或其他人可以复用它们。一种OOP语言通常带有一套现成的库,这并不奇怪。以C#为例,这门语言是.NET Framework的一部分,它提供了一套详细设计并经过测试的类库。编写和发布自己的库也很容易。编程平台中对可复用性的支持是非常吸引人的,因为它会缩短开发时间。

类的可复用性的最大挑战之一就是为类库创建好的文档。程序员如何才能快速地找到提供了他(或她)想要的功能的那个类?找到这样一个类会比从头编写一个新的类更快吗?好在,.NET Framework类库有大量的文档。

可复用性不仅适用于编码阶段类或其他类型的复用,当我们在OO系统中设计一个应用时,OO设计问题的解决方案也可以复用。这些解决方案叫作设计模式。为了更容易地指明每一种解决方案,人们给每种模式都起了一个名称。在经典的设计模式图书《Design Patterns:Elements of Reusable Object-Oriented Software》中,我们可以找到可复用的设计模式的最早的名录,该书作者是Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides。

3.可扩展性

每个应用都是独一无二的,都有自己的需求和规格。说到可复用性,有时我们无法找到一个已有的类能够提供应用程序所需的确切功能。但是,我们可能会找到一个或两个类,它们提供了这些功能的一部分。可扩展性意味着,我们仍然可以使用这些类,通过扩展它们来满足我们的需求。我们还节省了时间,因为不需要从头编写代码。

在OOP中,可扩展性通过继承来实现。我们可以扩展一个已有的类,为它添加一些方法或数据,或者修改不喜欢的方法行为。如果知道该基本功能会在许多示例中使用,但是又不希望类提供非常具体的功能,那么我们可以提供一个通用的类,以后可以扩展它来为应用程序提供具体的功能。

C#程序员需要熟练掌握OOP。如果你曾经使用过过程式语言,诸如C或Pascal,你会发现有很大的不同。鉴于此,这既是好消息又是坏消息。

我们先说坏消息。

研究人员一直针对在学校教授OOP的最好的方式而争论不休。有些人认为,最好的方法是在介绍OOP前先教授过程式语言。我们发现,在许多学校,OOP课程往往安排在接近大学最后1年。

但是,最新的研究表明,拥有过程式编程技能的人和OO程序员的视角以及解决问题的模式差异迥然。当熟悉过程式编程的人需要学习OOP时,他所面临的最大障碍就是模式的转变。据说,从过程式转变到面向对象模式,这种观念的转变需要6~18个月的时间。其他的研究也表明,没有学习过过程式编程的学生,不会觉得OOP很难。

我们再来说好消息。

C #是学习OOP的最简单的语言之一。例如,我们不需要担心指针,也不需要花费宝贵的时间去解决由于没有释放不用的对象而引起的内存泄漏的问题。最重要的是,.NET Framework有一个非常广泛的类库,在其早期的版本中,bug相对来说很少。一旦我们掌握了OOP的基本要点,用C#编程是很容易的。

本书每一章的内容可以概述如下。

第1章,“初识C#”。本章编写了一个简单的C#程序,然后用csc工具编译并运行它。另外,本章还给出关于编码惯例和集成开发环境的一些建议。

第2章,“语言基础”介绍了C#语言的语法,还介绍了字符集、基本类型、变量和运算符等。

第3章,“语句”,介绍了C#中的for、while、do-while、if、if-else、switch、break和continue等语句。

第4章,“对象与类”,是本书中的第一节OOP课程。本章通过解释什么是C#对象以及如何在内存中存储它开始了对OOP的学习,然后继续介绍了类、类成员以及两个OOP的概念(抽象和封装)。

第5章,“核心类”介绍了.NET Framework类库中重要的类:System.Object、System.String、System.Text.StringBuilder和System.Console,还介绍了数组。本章非常重要,因为本章所介绍的类是.NET Framework中最常用到的一些类。

第6章,“继承”,介绍了OOP的特性之一——继承,它使得代码可以扩展。本章介绍了如何扩展一个类、影响子类的可访问性以及覆盖方法等内容。

第7章,“结构”,介绍了CTS的第二种类型——结构。本章强调了引用类型和值类型之间的不同,介绍了.NET Framework类库中经常用到的一些结构。本章还介绍了如何编写自己的结构。

毋庸置疑,错误处理在任何编程语言中都是一项重要特性。作为一门成熟的语言,C#有非常健壮的错误处理机制,它能防止bug四处蔓延。第8章“错误处理”详细介绍了这种机制。

第9章,“数字和日期”,介绍了在使用数字和日期时所要处理的三个问题:解析、格式化和操作。本章还介绍了可以帮助我们完成这些任务的.NET类型。

第10章,“接口和抽象类”,解释了接口远不只是没有实现的类那么简单。接口定义了服务提供者和客户之间的一个契约。本章还介绍了如何使用接口和抽象类。

第11章,“枚举”,介绍了如何使用关键字enum来声明一个枚举类型。本章还描述了如何在C#程序中使用枚举。

第12章,“泛型”,介绍了泛型。

第13章,“集合”,介绍了如何使用System.Collections.Generic命名空间的成员来组织对象和操作它们。

第14章,“输入和输出”,介绍了流的概念,而且介绍了如何使用流来执行输入和输出的操作。

你会发现第15章“WPF”的内容很有趣,因为我们将学习编写有漂亮用户界面和易用控件的桌面应用程序。

多态是OOP的主要支柱之一。当一个对象的类型在编译时不为人知的时候,多态是非常有用的。第16章“多态”介绍了这种特性并且提供了有用的示例。

访问数据库并且操作数据,这是商业应用程序中最重要的一项任务。目前有许多种不同的数据库服务器,访问不同的数据库需要不同的技能。在第17章“ADO.NET”中,我们介绍如何访问数据库以及操作数据库中的相关数据。

附录A,“Visual Studio Express 2012 for Windows Desktop”,介绍了一款免费的集成开发环境(Integrated Development Environment,IDE),它能帮助我们更有效地编写代码。Visual Studio Express 2012 for Windows Desktop运行在Windows 7和Windows 8上,如果你使用这类操作系统,应该考虑使用它。如果你使用更早版本的Windows,那么可以选择Visual C# 2010 Express作为IDE,我们会在附录B“Visual C# 2010 Express”中介绍它。

最后,附录C介绍了如何安装SQL Server 2012 Express这款免费的软件并创建了一个数据库。

在开始编译和运行C#程序前,我们需要下载和安装.NET Framework软件。

默认情况下,在.NET Framework出现后发布的Windows操作系统会包含某个版本的.NET Framework软件。Windows 7附带的是.NET Framework 3.5。因此,如果你需要版本4或4.5,那就需要单独安装它。如果你计划使用Visual Studio,那么你很幸运,因为它已经包含了某个版本的.NET Framework,不需要再单独安装。否则,你可以通过以下链接下载4.5版本。

http://msdn.microsoft.com/en-us/library/5a4x27ek.aspx

要在命令行进行编译,我们需要把包含csc.exe文件(C#编译器)的路径添加到PATH环境变量中。这个路径是C:\Windows\Microsoft.NET\Framework\v4.x.y,其中x和y是版本号。x和y的实际值要根据所安装的版本来决定。例如,作者计算机上的版本是4.0.30319。

如果你使用的是64位的计算机,那么路径可能如下所示:C:\Windows\Microsoft.NET\ Framework64\v4.x.y。

要给PATH变量添加一个路径,我们首先需要用鼠标右键点击桌面上的“My Computer”图标,选择“Properties”菜单项。其次在弹出的对话框中,点击位于“Advanced”标签页或“Advanced system settings”标签页上的“Environment Variables”按钮。最后在弹出的对话框中,把上述路径添加到System变量列表框中当前的Path变量的末尾。请注意,每条路径之间必须要用分号隔开。

IDE是每一位程序员都要使用的工具。大多数现代IDE通过帮助程序员更早地找到bug、debug并跟踪程序,从而显著地提高生产效率。

就.NET Framework开发而言,它有很多IDE可用,但是Microsoft Visual Studio显然是赢家。好在,精简版的Visual Studio,Visual Studio Express 2012 for Windows Desktop(针对Windows 7和Windows8 用户)和Visual C# 2010 Express(针对较早的Windows版本)是免费的。如果你还没有IDE,那么应该现在就去下载并安装它。在第一次使用后,你还需要注册软件,以便继续使用它。

注册是免费的。

本书的程序示例以及每章中问题的答案可以从以下网址下载。

http://books.brainysoftware.com/download/csharp.zip

首先将这个zip文件解压缩到一个工作路径中。现在可以开启你的C#编程之旅了。


开发一款C#程序,包括编写代码、把它编译成通用中间语言(Common Intermediate Language ,CIL)编码以及运行CIL编码。作为一名C#程序员,你会不断地重复这个过程,而熟悉和习惯这个过程也是至关重要的。因此,本章的主要目标是,帮助你体验在Visual Studio Express 2012 for Windows Desktop 或Visual C# 2010 Express这两种免费的微软IDE中使用C#来进行软件开发的过程。

编写的代码不仅能工作,而且要易读和可维护,这一点是很重要的。本章将介绍C#编码惯例。

本章及以后章节的示例代码都假设用Visual Studio Express 2012 for Windows Desktop或Visual C# 2010 Express 开发。

本节重点介绍C#开发的步骤:编写程序、把它编译成CIL编码并且运行CIL编码。这里你将会用到Visual Studio Express 2012 for Windows Desktop 或Visual C# 2010 Express,可以通过微软的官方网站免费下载它们。如果你还没有安装IDE,请先安装IDE。Visual Studio Express 2012 for Windows Desktop适合运行在Windows 7和Windows 8上,如果你使用这类操作系统,应该考虑使用它;否则,请下载和安装Visual C# 2010 Express,可以参见附录A或附录B。

启动 IDE。打开程序后,你会看到如图1-1或1-2所示的界面。如果软件无法打开,那是因为还没有注册,你应该马上去注册。注册是免费的,而且很简单,更多信息请参见附录A和附录B。

图1-1 Visual Studio Express 2012的启动界面

图1-2 Visual C# 2010 Express已准备就绪

两个IDE窗口看上去不同,但是都提供了类似的功能。因此下文中我们只介绍在Visual C# 2010 Express的截屏图。

点击“New Project”图标创建新的项目,然后选择“Console Application”,如图1-3所示。

图1-3 创建一个新的项目

接受ConsoleApplication1作为解决方案和项目名称,然后点击“OK”按钮,你就会看到所创建的项目和解决方案,如图1-4所示。更棒的是,Visual C# 2010 Express还创建了一个附带一些样板代码的程序文件,如图1-3所示。注意,项目就是一个便于管理应用的容器。它包含C#源代码文件、图片和视频文件等其他的资源文件以及描述应用的记录文档。当创建一个项目时,Visual C# 2010 Express还创建一个解决方案。解决方案是另一种容器,它可以包含一个或多个项目。

图1-4 创建的解决方案和项目

现在,你可以开始编写代码了。

static void Main(string[] args)后边的大括号中插入如下两行语句。

Console.WriteLine("Hello World!");
Console.ReadLine();

程序清单1.1展现了完整的程序代码,新插入的语句用加粗字体表示。

程序清单1.1 一个简单的C#程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1 {   class Program   {     static void Main(string[] args)     {       Console.WriteLine("Hello World!");       Console.ReadLine();     }   } }

另外,你可以双击本书附带的zip文件中的.sln文件查看,zip文件可以从本书站点下载。

用Visual C# 2010 Express开发真的非常简单。要编译代码,直接按下“F5”键或者点击工具栏上的Start 按钮即可。Start按钮是绿色的,如图1-5所示。

图1-5 Start按钮

如果程序编译成功,Visual C# 2010 Express将会运行这个程序。你可以在控制台看到文本“Hello World!”,如图1-6所示。

图1-6 运行这个程序

恭喜,你已经成功编写了第一个C#程序。在欣赏完第一个程序后,你可以按下“Enter”键来关闭控制台。本章唯一的目的就是让你熟悉编写和编译的过程,我们就不再试图去解释程序是如何工作的了。

编写能够正确运行的C#程序很重要。但是,代码的易读性和易维护性也是至关重要的。可以说,一款软件80%的生命周期是用在维护上。程序员的流动率是很高的,因此其他人来维护你编写的代码的可能性也是很大的。任何接手你所编写的代码的人,都会因为你编写的源代码干净并且易读而心存感激。

使用一致的编码惯例是使你的代码更易阅读的一种方法(其他方法还包括正确的代码组织和充分的注释)。编码惯例包括文件名、文件组织、缩进、注释、声明、语句、空白以及命名惯例。微软发布了一个文档,描述了微软员工需要遵守的标准。该文档的链接如下。

http://msdn.microsoft.com/en-us/library/ff926074.aspx

本书的示例程序都会遵循该文档所建议的惯例。我们也希望你能在编程生涯的第一天就养成习惯,遵守这些惯例,以便在今后能自然而然地编写出干净的代码。

本章用Visual Studio Express 2012 for Windows Desktop或Visual C# 2010 Express帮助你编写了第一个C#程序。你已经成功地编写、编译和运行了你的程序。


相关图书

程序员的制胜技
程序员的制胜技
C#开发案例精粹
C#开发案例精粹
C#完全自学教程
C#完全自学教程
C#从入门到精通(第2版)
C#从入门到精通(第2版)
C#本质论(第4版)
C#本质论(第4版)
C# 5.0入门经典
C# 5.0入门经典

相关文章

相关课程