前 言
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了),改进的属性实现方式,表达式主体方法等。
C# 7.0进一步增强,提高了生产力并移除了C#一些不合时宜的设计。例如,现在属性访问器方法可作为表达式主体成员实现,方法支持以元组形式返回多个值,简化了out参数的用法,switch语句开始支持模式和类型匹配。还有其他许多更新,本书将一一阐述。
虽然Windows 10是运行C#应用程序最重要的平台,但现在也可通过.NET Core运行时在其他操作系统(包括Linux)上运行用C#写的代码。这使程序更容易在多种环境中运行。另外,Windows 10支持高度交互性的应用程序,它们可以进行数据共享和协作,还可以连接云服务。Windows 10最引人注目的是对UWP(Universal Windows Platform,通用Windows平台)应用的支持。这种应用设计在任何Windows 10设备上运行,无论是全功能的桌面系统、笔记本和平板,还是资源有限的智能手机和物联网设备。熟悉C#的核心功能后,下一步就是掌握如何开发能在所有这些平台上运行的应用。
语音激活是另一个值得关注的功能。Windows 10提供了Cortana(小娜)个人语音数字助理。可将自己的应用和Cortana集成来实现数据搜索和其他操作。虽然自然语音分析天生就很复杂,但让应用响应Cortana的请求却令人惊讶地简单。详情将在第26章描述。另外,从大规模企业应用程序到手机上运行的移动应用,云已成为许多系统架构的重要元素,本书最后一章会讲解如何开发基于云的应用。
Visual Studio 2017开发环境使这些强大功能变得容易使用,大量新向导和增强显著提高了开发效率。写作这本书给我带来了许多乐趣,希望你的阅读亦是如此!
下面列出和本书《Visual C#从入门到精通》第8版相比的主要变化(从译者的角度整理)。
2.3.3节“指定数值”,强调了显式指定值的类型的重要性。
3.1.5节“从方法返回多个值”,引入元组概念,从一个方法返回多个值。这章开始引入表达式主体方法,注意虽然都用=>操作符,但表达式主体方法和Lambda表达式有本质的不同。相当于=>的两个重载。
3.3.2节“嵌套方法”,本节提到的Factorial解决方案在学生文件中不可用。解决方案是用空白的DailyRate解决方案。
6.2.4节“筛选异常”,catch (...) when (...) {}。
6.4.1节“使用throw表达式”,用?:操作符简化抛出异常的代码。例如: string name = nameField.Text != "" ? nameField.Text : throw new Exception("未输入值");。不这样写,就要写一长串if…else语句。
7.4.3节“解构对象”,讲的是和元组配合使用。Deconstruct方法和out参数相配合,向元组中的变量赋值。不要把解构器和析构器弄混了。
8.2.1节“空条件操作符”,在对象上调用其方法时,用?.操作符判断对象是否为null。例如,A?.B?.C?.Do(E); 。其中,ABC任何一个求值为null,E都不会执行(短路)。
8.8.3节“复习switch语句”用switch代替一系列if (expr is type varname)...
else if(expr is type varname)...语句,从而简化空引用检查(不用is操作符)。case还能加when表达式来进一步限制条件。
10.1.11节“访问包含值类型的数组”,讲的是一些传统数组处理方法,在数组元素从引用类型修改成值类型后会出错,因为现在返回拷贝而非引用。解决方案是用ref关键字返回引用。例如,ref type method(...){... return ref 数组元素}。注意两个地方添加了ref。调用也要改,变成ref type variable = ref method(...)。
第15章的简单属性大量改为使用表达式主体方法。例如,get { return this._x; }改为get => this._x;。
第16章介绍了新的常量表达式,可以直接将二进制赋给变量了:uint binData = 0b01111;。0b0是二进制,0x0是十六进制。眼睛看不过来还可以加下划线(编译器会忽略),例如uint moreHexData = 0x0_F0_5A_CC_0F;。
21.2.6节的练习和原书不符,解决方案并没有一开始就集成BinaryTree项目,需自己添加。
24.1.6节“任务、内存分配和效率”解释了如何用Cache-Aside设计模式把异步方法设计成大多数时候都同步执行,耗时的、经常重复的计算的结果放到缓存中。需要用NuGet包管理器下载System.Threading.Tasks.Extensions包。
第27章对有关Azure云的内容进行了全面修订,代码简化了不少。
本书面向的读者
本书假定你要使用Visual Studio 2017和.NET Framework 4.6.1学习基础的C#编程知识。学完本书后,会对C#有一个全面和透彻的理解,会用它开发响应灵敏、易于伸缩的Windows 10应用程序。
本书不面向的读者
本书面向刚开始用C#进行开发的人士,重点放在C#语言上面。本书不涉及企业级Windows应用程序的开发技术,比如ADO.NET、ASP.NET、Windows Communication Foundation或者Workflow Foundation。要了解这些方面的知识,可参考微软出版社的其他书籍。
本书的组织
全书分为四部分。
第I部分“Visual C#和Visual Studio 2017概述”介绍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. 按照“示例代码”一节的步骤安装练习文件
过程编程语言, 2. 略读前5章来获得对C#和Visual Studio 2017的大致印
但新涉足C# 象,重点阅读第6章~第22章
3. 阅读第Ⅳ部分了解如何构建可伸缩的Windows应用
从面向对象语言C++或 1. 按照“示例代码”一节的步骤安装练习文件
Java等迁移到C# 2. 略读前7章,获得对C#语言和Visual Studio 2017的大
致印象,重点阅读第8章~22章
3. 阅读第Ⅳ部分了解如何构建UWP应用
从Visual Basic迁移到C# 1. 按照“示例代码”一节的步骤安装练习文件
2. 顺序阅读第Ⅰ部分、第Ⅱ部分和第Ⅲ部分
3. UWP应用的开发请阅读第Ⅳ部分
4. 阅读每章末尾的“快速参考”小节,
了解C#和Visual Studio 2017特有的构造
做完所有练习后再将 1. 按目录查主题
本书用作为参考书 2. 阅读章末“快速参考”,查看语法和技术要点归纳
本书大多数章节都通过实例方便读者巩固刚学到的知识。无论感兴趣的是哪个主题,都注意先下载并安装好示例代码。
本书的约定和特色
本书通过一些约定来增强内容的可读性,以便于读者理解。
每个练习都用编号的操作步骤来完成。
“注意”等特色段落提供了成功完成一个步骤需要了解的额外信息或替代方案。
要求读者输入的文本加粗显示。
两个键名之间的加号(+)意味着必须同时按下这两个键。例如,“按组合键Alt+ Tab”意味着按住Alt键,再按Tab键。
描述菜单操作时,采用“文件”|“打开”的形式,意思是从“文件”菜单中选择“打开”命令。
系统需求
为了完成本书的练习,需准备以下硬件和软件:
Windows 10家庭、专业、教育或企业版,版本1507或以上
Visual Studio 2017社区、专业或企业版的最新版本。安装时最起码选择以下工作负载:
- 通用Windows平台开发
- .NET桌面开发
- ASP.NET和Web开发
- Azure开发
- 数据存储和处理
- .NET Core跨平台开发
1.8 GHz或更快的处理器(推荐双核或以上)
2 GB RAM(推荐4GB,在虚拟机中运行再加512 MB)
10 GB可用硬盘空间
1024 × 768或更高分辨率显卡
下载软件和示例代码需要Internet连接
取决于Windows配置,可能需要以管理员身份安装和配置Visual Studio 2017。
电脑上要启用开发人员模式以创建和运行UWP应用。详情参考“启用设备进行开发”(https://msdn.microsoft.com/library/windows/apps/dn706236.aspx)。
示例代码
本书大多数章节都包含互动练习供练手。从以下网址下载示例代码(包括练习完成前后两种格式):
http://aka.ms/VisCSharp9e/downloads
http://bookzhou.com
安装示例代码很简单,将下载的zip文件解压到“文档”文件夹即可。
使用示例代码
本书每一章都解释了在什么时候以及如何使用练习文件。需要练习文件时,书中会给出相应的指示,帮助你打开正确文件。
重要提示 许多例子都依赖示例代码没有包含的NuGet包。这些包在首次生成项目时自动下载(有的需手动搜索并安装)。如首次打开一个项目且不生成,Visual Studio可能报告大量引用无法解析的错误。生成一次即可完成引用的解析,错误将消失。
下表总结了本书用到的所有Visual Studio 2017项目和解决方案,它们以文件夹的形式进行分组以便查找。练习通常会为同一个项目提供初始文件和完成之后的版本。已完成的项目存储在带有- Complete后缀的文件夹中。
...