图书前言

前    言

  Microsoft Visual C#是一种功能强大、使用简单的语言,主要面向需要使用Microsoft .NET Framework来创建应用程序的开发者。它在C++和Microsoft Visual Basic的基础上去芜存菁,最终形成一种更加清晰、更富有逻辑的语言。C# 1.0于2001年亮相。几年后随着C# 2.0和Visual Studio 2005的问世,语言新增了几个重要功能,包括泛型、迭代器和匿名方法等。随同Visual Studio 2008发布的C# 3.0添加了更多功能,包括扩展方法、Lambda表达式以及语言集成查询(Language Integrated Query,LINQ)。2010年发布的C# 4.0继续增强,改善了与其他语言和技术的互操作性。新增功能包括具名参数和可选参数,另外还有dynamic类型(指示语言的"运行时"对对象进行晚期绑定)。在随同C# 4.0发布的.NET Framework中,最重要的新功能就是"任务并行库"(Task Parallel Library,TPL)。可用TPL构建具有良好伸缩性的应用程序,从而快速和简单地发挥出多核处理器的潜力。C# 5.0则通过async方法修饰符和await操作符提供了对异步任务的原生支持。C# 6.0是一次增量式升级,提供了许多有利于简化开发的功能,包括字符串插值(再也不需要String.Format了),改进的属性实现方式,表达式主体方法等。本书将一一阐述。

  Microsoft的另一个里程碑事件是Windows 10的发布。新的操作系统集成了以前版本的Windows最好(和最受人喜爱)的元素,支持高交互性的应用。这些应用实现了数据共享和协作,还能连接在云端运行的服务。Windows 10最引人注目的是对(通用Windows平台,Universal Windows Platform,UWP)应用的支持。这种应用设计在任何Windows 10设备上运行,无论是全功能的桌面系统、笔记本和平板,还是资源有限的智能手机和物联网设备。熟悉C#的核心功能后,下一步就是掌握如何开发能在所有这些平台上运行的应用。

  语音激活是另一个值得关注的功能。Windows 10提供了Cortana(小娜)--你的个人语音数字助理。可将自己的应用和Cortana集成来实现数据搜索和其他操作。虽然自然语音分析天生就很复杂,但让应用响应Cortana的请求却令人惊讶地简单。详情将在第26章描述。另外,从大规模企业应用程序到手机上运行的移动应用,云已成为许多系统架构的重要元素,本书最后一章会讲解如何开发基于云的应用。

  Visual Studio 2015开发环境使这些强大功能变得容易使用,大量新向导和增强显著提高了开发效率。写作这本书给我带来了许多乐趣,希望你的阅读亦是如此!

  下面列出和本书上一版《Visual C# 2013从入门到精通》相比的主要变化:

* 代码字体改用Consolas,可以更好地保护程序员的视力

* 针对Windows 10上的UWP应用开发进行了全面重写,不需要针对不同Windows平台维护不同代码库

* 字符串插值,所有代码都修改为可以利用该技术,参见2.5.1节

* 表达式主体方法,参见3.1.3节

* 异常过滤器,参见6.2.3节

* using static语句,参见7.5.4节

* 可以创建只读的自动属性了,参见15.5节

* 索引器风格的对象初始化列表,声明并初始化字典时特别好用,参见18.2节  

* 利用可视状态触发器大幅简化视图大小自适应代码,参见25.2.1节

* nameof操作符,参见26.1.2节

* 和小娜一起玩语音搜索,参见26.2节

* 与时俱进使用Microsoft Azure创建云端数据库,参见第27章

本书面向的读者

  本书假定你要使用Visual Studio 2015和.NET Framework 4.6学习基础的C#编程知识。学完本书后,会对C#有一个全面和透彻的理解,会用它开发响应灵敏、易于伸缩的Windows 10应用程序。

本书不面向的读者

  本书面向刚开始用C#进行开发的人士,重点放在C#语言上面。本书不涉及企业级Windows应用程序的开发技术,比如ADO.NET、ASP.NET、Windows Communication Foundation或者Workflow Foundation。要了解这些方面的知识,可参考微软出版社的其他书籍。

本书的组织

  全书分为四部分。

* 第I部分"Visual C#和Visual Studio 2015概述"介绍C#语言的核心语法,还演示了Visual Studio编程环境。

* 第II部分"理解C#对象模型"深入探讨如何用C#创建和管理新类型,如何管理这些类型引用的资源。

* 第III部分"用C#定义可扩展类型"全面讨论如何利用C#语言元素来构建能在多个应用程序中重用的类型。

* 第IV部分"用C#构建UWP应用"描述通用Windows 10编程模型,以及如何用C#为新模型构建交互式应用程序。

导读

  本书帮助你掌握多个基本领域的开发技能。无论刚开始学习编程,还是从另一种语言(C、C++、Java或Visual Basic)转向C#,本书都能提供帮助。参考下表找到最佳起点。

  

读者类型          步骤

面向对象编程的新手 1. 按照“示例代码”一节的步骤安装练习文件

                        2. 顺序阅读第Ⅰ部分、第Ⅱ部分和第Ⅲ部分

                        3. 有了一定经验后,如果有兴趣,继续完成

                           第Ⅳ部分的学习

熟悉C语言等过程编程     1. 按照“示例代码”一节的步骤安装练习文件

语言,但新涉足C# 2. 略读前5章来获得对C#和Visual Studio 2015的大致印

                        象,重点阅读第6章~第22章

                        3. 阅读第Ⅳ部分了解如何构建可伸缩的

                        Windows 8.1应用程序

从面向对象语言C++或     1. 按照“示例代码”一节的步骤安装练习文件

                        Java等迁移到C#

                        2. 略读前7章,获得对C#语言和Visual Studio 2015的大

                        致印象,重点阅读第8~22章

                        3. 阅读第Ⅳ部分了解如何构建UWP应用

从Visual Basic迁移到C#  1. 按照“示例代码”一节的步骤安装练习文件

                        2. 顺序阅读第Ⅰ部分、第Ⅱ部分和第Ⅲ部分

                        3. UWP应用的开发请阅读第Ⅳ部分

                        4. 阅读每章末尾的“快速参考”小节,

                        了解C#和Visual Studio 2015特有的构造

做完所有练习后再将      1. 按目录查主题

本书用作为参考书 2. 阅读章末“快速参考”,查看语法和技术要点归纳

  本书大多数章节都通过实例方便读者巩固刚学到的知识。无论感兴趣的是哪个主题,都注意先下载并安装好示例代码。

本书的约定和特色

  本书通过一些约定来增强内容的可读性,以便于读者理解。

* 每个练习都用编号的操作步骤来完成。

* "注意"等特色段落提供了成功完成一个步骤需要了解的额外信息或替代方案。

* 要求读者输入的文本加粗显示。

* 两个键名之间的加号(+)意味着必须同时按下这两个键。例如,"按组合键Alt+  Tab"意味着按住Alt键,再按Tab键。

* 描述菜单操作时,采用"文件"|"打开"的形式,意思是从"文件"菜单中选择"打开"命令。

系统需求

  为了完成本书的练习,需准备以下硬件和软件:

* Windows 10专业版或更高版本

* Visual Studio 2015社区版、专业版或企业版

重要提示 需要在Visual Studio 2015中安装Windows 10开发工具。 

* 1.6 GHz或更快的处理器(推荐2 GHz以上)

* 32位操作系统至少1 GB RAM,64位至少2 GB RAM。在虚拟机中运行再加512 MB

* 10 GB可用硬盘空间

* 支持DirectX 9的显示卡,1024 × 768或更高分辨率

* 光盘驱动器(如果从光盘安装Visual Studio)

* 下载软件和示例代码需要Internet连接

  取决于Windows配置,可能需要以管理员身份安装和配置Visual Studio 2015。

  计算机需启用开发人员模式以创建和运行UWP应用。详情参考"启用设备进行开发"(https://msdn.microsoft.com/library/windows/apps/dn706236.aspx)

示例代码

  本书大多数章节都包含互动练习供你练手。从以下网址下载所有示例项目(包括练习前后两种格式):

  http://aka.ms/sharp8e/companioncontent

http://pan.baidu.com/s/1yd43W

http//transbot.ys168.com

  安装示例代码很简单,将下载的CSharpSBS.zip文件解压到"文档"文件夹即可。①

使用示例代码

  本书每一章都解释了在什么时候以及如何使用练习文件。需要练习文件时,书中会给出相应的指示,帮助你打开正确文件。

重要提示 许多例子都依赖NuGet包。这些包在首次生成项目时自动下载。所以如果首次打开一个项目而且不进行生成,Visual Studio可能报告大量引用无法解析的错误。生成一次项目即可完成引用的解析,错误会消失不见。 

  

下表总结了本书用到的所有Visual Studio 2015项目和解决方案,它们以文件夹的形式进行分组以便查找。练习通常会为同一个项目提供初始文件和完成之后的版本。已完成的项目存储在带有- Complete后缀的文件夹中。

项目/解决方案 说明

第1章

TextHello 作为第一个项目,它指导你创建一个简单程序来显示欢迎文本

Hello         打开一个窗口,提示用户输入姓名并显示个性化的欢迎辞

第2章

PrimitiveDataTypes 演示如何使用基元类型声明变量,如何向变量赋值,如何在窗口中显示值

MathsOperators    演示算术操作符(+、–、*、/、%)

第3章

Methods           改进上个项目的代码,体会如何使用方法来建立代码的结构

DailyRate 指导你写自己的方法,执行方法,使用Visual Studio 2015调试器来单步执行方法

DailyRate Using 

Optional Parameters 演示如何让方法获取可选参数,如何使用具名参数来调用方法

第4章

Selection 演示如何用嵌套if语句实现复杂逻辑,例如比较两个日期的相等性

SwitchStatement 这个简单的程序使用一个switch语句将字符转换成相应的XML形式

第5章

WhileStatement 用while语句逐行读取源文件,在窗体上的文本框中显示每一行

DoStatement 使用do语句将十进制数转换成八进制

 

第6章

MathsOperators 改进第2章的MathsOperators项目,试验会造成程序执行失败的各种未处理异常。

                然后用try和catch关键字使应用程序更健壮,防止因为错误输入或操作而失败

第7章

Classes 演示如何定义自己的类,为它添加公共构造器、方法和私有字段;还演示如何用new关键字创建类的实例,如何定义静态方法和字段

第8章

Parameters 演示值类型和引用类型的参数的区别,还演示如何使用ref和out关键字

第9章

StructsAndEnums 定义结构来表示日期

第10章

Cards 使用数组建模纸牌游戏中的一手牌

第11章

ParamsArrays 演示如何使用params关键字使方法能接受任意数量的实参

第12章

Vehicles 用继承创建简单交通工具类,还演示如何定义虚方法

ExtensionMethod 演示如何为int类型创建扩展方法,允许将整数从十进制转换成其他进制

第13章

Drawing 实现图形绘图包的一部分。用接口定义要由几何图形对象公开并实现的方法

Drawing Using Interfaces 扩展Drawing项目,将几何图形对象的常用功能集成到抽象类中

第14章

GarbageCollectionDemo 演示如何使用Dispose模式实现异常安全的资源清理

第15章

Drawing Using

 Properties 扩展第13章的Drawing项目,用属性封装类的数据

AutomaticProperties 演示如何为类创建自动属性,如何用它们初始化类的实例

第16章

Indexers 该项目使用了两个索引器,一个根据姓名查找电话号码,另一个根据电话号码查找姓名

第17章

BinaryTree 演示如何使用泛型生成类型安全的结构,可包含任何类型的元素

BuildTree 演示如何使用泛型实现类型安全的方法,可获取任何类型的参数

第18章

Cards 升级第10章的代码,演示如何用集合建模一手牌

第19章

BinaryTree 演示如何实现泛型IEnumerator<T>接口,为泛型Tree类创建枚举器

IteratorBinaryTree 用迭代器为泛型Tree类生成枚举器

第20章

Delegates 演示如何通过委托调用方法,将方法的逻辑和调用方法的应用程序分开。然后对项目进行扩展,演示如何用事件提醒对象发生了某事,以及如何捕捉事件并执行必要的处理

第21章

QueryBinaryTree 演示如何通过LINQ查询从二叉树对象获取数据

第22章

ComplexNumbers 定义新类型来建模复数,并为这种类型实现常用的操作符

第23章

GraphDemo 生成并在UWP窗体上显示复杂图表。用单线程执行计算

Parallel GraphDemo 使用Parallel类对创建和管理任务的过程进行抽象

GraphDemo With

 Cancellation 中途得体地取消任务

ParallelLoop 演示何时不该使用Parallel类创建和运行任务

第24章

GraphDemo 修改第23章的同名项目,使用async关键字和await操作符异步计算图表数据

PLINQ 使用并行任务,用PLINQ查询数据

CalculatePI 使用统计学采样计算PI的近似值。使用了并行任务

第25章

Customers 实现能自动适应不同屏幕分辨率和设备大小的UI。UI使用XAML样式更改字体和背景图片

 

第26章

DataBinding 修改上一章的Customers项目,使用数据绑定在UI中显示从数据源获取的客户资料;还演示了如何实现INotifyPropertyChanged接口,从而允许UI更新客户资料,并将改动发送回数据源

ViewModel 这个版本的Customers项目通过实现Model-View-ViewModel模式,将UI同数据源访问逻辑分开

Cortana 将Customers应用和Cortana集成。用户可发出语音指令来搜索客户

第27章

Web Service 该解决方案包含一个Web应用程序来提供ASP.NET Web API Web服务,使Customers应用能从SQL Server数据库获取客户数据。Web服务通过由实体框架创建的实体模型来访问数据库

① 译注:本书将路径"C:\Users\YourName\Documents"简称为"文档"文件夹。可在Windows文件资源管理器的地址栏输入环境变量%UserProfile%\Documents打开该文件夹。