VisualC#从入门到精通(第10版)

VisualC#从入门到精通(第10版)"

作者:[英]约翰·夏普(JohnSharp)著周靖译
ISBN:9787302617648
定价:¥189
字数:千字
页数:
出版时间:2022.10.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

C#作为微软的旗舰编程语言,是编写高效应用程序的语言,深受程序员喜爱。《Visual C#从入门到精通(第10版)》沿袭深受读者欢迎的Step by Step风格,围绕语言的基础知识和新功能进行了全面的介绍,同时借助于练习来引导读者逐步构建云端应用等。全书共27章,结构清晰,叙述清楚。所有练习均在Visual Studio 2022简体中文版上进行过全面演练。无论是刚开始接触面向对象编程的新手,还是打算迁移到C#的C、C++或Java程序员,都可以从本书中汲取到新的知识,迅速掌握C#编程技术。

前言

过去20年,很多事情都发生了变化。为了好玩,我有时会拿起2001年出版的第1版,并感慨自己当年的天真。当然,C#当时达到了完美编程语言的巅峰。C#和.NET Framework在开发界引起了轰动,其反响一直持续到今天。现在,两者非但没有泯然于众,反而在软件开发界的地位变得越来越重要。C#和.NET并不像2001年那些反对者最初所叫嚣的那样是一种单一的平台,而是逐渐证明自己是一种完整的多平台解决方案,无论你是为Windows、macOS、Linux还是Android构建应用程序。此外,C#和.NET已经证明自己是许多基于云的系统的首选运行库。没有它们,Azure怎么可能这么火? 

过去,大多数常用编程语言只是时不时地更新一下,往往相隔数年。以Fortran为例,会看到名为Fortran 66、Fortran 77、Fortran 90、Fortran 95、Fortran 2003、Fortran 2008和Fortran 2018的标准。这就是过去55年中的7次更新。虽然这种相对缓慢的变化周期有利于稳定性,但也可能导致停滞不前。问题在于,开发人员必须解决的问题的性质变化很快,他们所依赖的工具最好能跟上步伐,这样才能开发出有效的解决方案。微软.NET提供的正是这样一个不断发展的框架,C#语言也会相应地更新,从而最好地利用平台的优势。所以,和Fortran相比,C#语言自首次发布以来经历了快速迭代,仅过去5年内就有6个版本问世,2022年甚至会再次发布C#语言的一个新版本。C#语言仍然支持20多年前写的代码,但通过不断对语言进行补充和增强,现在能用更优雅的代码和更简洁的构造来创建解决方案。出于这个原因,本书也要定期进行更新,现在已经是第10版了!

C#语言的进化历程简要概述如下。

? 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# 7.3进一步增强,提高了生产力并移除了C#一些不合时宜的设计。例如,现在属性访问器方法可作为表达式主体成员实现,方法支持以元组形式返回多个值,简化了out参数的用法,switch语句开始支持模式和类型匹配。还有其他许多小的调整,解决了开发人员的众多关切,比如允许写异步Main方法。

? C# 8.0、C# 9.0和C# 10.0延续上一版的做法,继续对语言进行增强以提高可读性和帮助开发人员提高生产力。一些主要的新增特性包括record类型(用来构建不可变的引用类型)、扩展了模式匹配(现在能在整个语言中使用这个特性,不只局限于在switch语句中使用)、顶级语句(现在能将C#作为脚本语言使用,不必总是写一个Main方法)、默认接口方法、静态局部函数、异步可清理(asynchronous disposable)类型以及其他许多特性,所有这些都会在本书中讲到。

虽然微软的Windows是运行C#应用程序最重要的平台,但现在也可通过.NET运行时在其他操作系统(包括Linux)上运行用C#写的代码。这样一来,程序更容易在多种环境中运行。另外,Windows支持高度交互性的应用程序,它们可以进行数据共享和协作,还可以连接云服务。Windows最引人注目的是对UWP(Universal Windows Platform,通用Windows平台)应用的支持。这种应用设计在任何Windows 10或Windows 11设备上运行,无论这些设备是全功能的桌面系统、笔记本和平板,还是资源有限的智能手机和物联网(IoT)设备。熟悉C#语言的核心特性后,下一步是掌握如何开发能在所有这些平台上运行的应用。

云已成为许多系统架构中的一个重要元素——从大型企业应用,到在便携式设备上运行的移动应用,所以,我决定在本书最后一章重点讨论这方面的开发。

Visual Studio开发环境使这些特性变得很容易使用,大量新向导和增强显著提升了开发人员的生产力。这本书的写作过程中,我感受到了许多乐趣,希望你的阅读也如此!

本书适合哪些读者

本书假定读者要使用Visual Studio和.NET 6(以及更高版本)学习基础的C#编程知识。学完本书后,会对C#语言有一个全面和透彻的理解,会用它来开发响应灵敏、易于伸缩且能在Windows操作系统上运行的应用程序。

 

本书不适合哪些读者

本书面向刚开始接触C#语言的开发人员,所以重点会侧重于C#语言本身。本书不涉及企业级和全局Windows应用程序开发技术,比如ADO.NET、ASP.NET、Azure或Windows Presentation Foundation(WPF)。要了解这些知识,可参考微软出版社出版的其他书籍。

导读

本书可以帮助读者掌握多种基本开发技能。无论是刚开始学习编程,还是从另一种语言(C、C++、Java或Visual Basic)转向C#,本书都能提供帮助。参考下表,找到最合适自己的起点即可。

读者类型           步骤

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

2. 顺序阅读第1章~第22章

3. 有一定经验后,如有兴趣,继续完成第23章~第27章的学习

熟悉C语言等过程式编程语言,但新涉足C# 1. 按照稍后“示例代码”一节的步骤安装练习文件

2. 略读前5章来获得对C#语言和Visual Studio 2022的大致印象,然后重点阅读第6章~第22章

3. 有一定经验后,如有兴趣,继续完成第23章~第27章的学习

从C++或Java等面向对象语言迁移到C# 1. 按照稍后“示例代码”一节的步骤安装练习文件

2. 略读前7章来获得对C#和Visual Studio 2022的大致印象,然后重点阅读第8章~第22章

3. 阅读第23章~第27章了解如何构建UWP应用程序

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

2. 顺序阅读第1章~第22章

3. 阅读第23章~第27章了解如何构建UWP应用程序

4. 阅读每章末尾的“快速参考”小节,了解C#语言和Visual Studio 2022特有的信息

做完所有练习后再将本书用作参考 1. 按目录查主题

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

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

 

本书约定和特色

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

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

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

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

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

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

系统需求

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

? Windows 10/Windows 11家庭、专业、教育或企业版

? Visual Studio 2022社区、专业或企业版的最新版本。安装时最起码选择以下“工作负荷”:

- 通用Windows平台开发

- .NET桌面开发

- ASP.NET和Web开发

- Azure开发

- 数据存储和处理

- .NET Core跨平台开发

 注意 本书所有练习和示例代码都用Visual Studio Community 2022开发和测试。它们在Visual Studio Professional 2022和Visual Studio Enterprise 2022中都应该能正常工作,无须进行任何修改。

? 1.8 GHz或更快的64位处理器(推荐四核或以上)。不支持ARM处理器

? 4 GB或更多RAM

? 硬盘空间:850 MB~210 GB可用空间,具体取决于所安装的特性;典型安装需要20~50 GB可用空间 

? 显卡支持最低720p分辨率(1280 ? 720);Visual Studio在WXGA分辨率(1366 ? 768)或更高分辨率下发挥得最好 

? 下载软件和示例代码需要网络连接

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

电脑上要启用开发人员模式以创建和运行UWP应用。详情参考“启用设备进行开发”(https://msdn.microsoft.com/library/windows/apps/dn706236.aspx)。

示例代码

本书大多数章节都包含互动练习供练手。从以下网址下载示例代码(包括练习完成前后的两种格式):

https://MicrosoftPressStore.com/VisualCsharp10e/downloads 

https://bookzhou.com

安装示例代码很简单,在“文档”文件夹中新建Microsoft Press文件夹,再在其中新建VCSBS子文件夹,最后打开下载的zip文件,将其中的chapter 1~chapter 27文件夹解压到该文件夹中。 

准备好的示例代码目录结构如下图所示。

使用示例代码

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

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

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

项目/解决方案 说明

第1章

HelloWorld 该项目帮你上手,指导你用文本编辑器手动创建一个简单程序,并显示基于文本的欢迎辞

HelloWorld2 演示如何使用.NET命令行界面(CLI)来自动生成并运行一个简单的C#应用程序

TestHello 该Visual Studio项目显示一条欢迎辞

HelloUWP 该项目打开一个窗口,提示用户输入自己的姓名,并显示相应的欢迎辞

第2章

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

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

第3章

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

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

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

Factorial 演示计算阶乘的递归方法

第4章

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

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

SwitchStatement using Pattern Matching SwitchStatement项目的修正版,使用模式匹配来简化switch语句中的逻辑

第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 实现图形绘图包的一部分。用接口定义要由几何图形对象公开并实现的方法

第14章

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

第15章

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

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

Student enrollment 演示如何使用record类型来建模结构化的不可变类型

第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的近似值。使用了并行任务

ParallelTest 演示并行线程不受控制地访问共享数据的危险性

第25章

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

第26章

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

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

第27章

Web Service 该解决方案包含一个Web应用程序来提供REST Web服务,Customers应用程序用它获取和修改一个SQL Server数据库中的客户数据。Web服务使用实体框架来访问数据库。数据库和Web服务在Azure上运行

Customers with insert and update features 该解决方案更新了Customers项目,使用REST网络服务来创建新客户和修改现有客户的资料

目录

简明

第Ⅰ部分  Visual C#和Visual Studio 2022概述

第1章  欢迎进入C#编程世界 3

第2章  使用变量、操作符和表达式 37

第3章  方法和作用域 61

第4章  使用判断语句 93

第5章  使用复合赋值和循环语句 115

第6章  管理错误和异常 131

第Ⅱ部分  理解C#对象模型

第7章  创建并管理类和对象 155

第8章  理解值和引用 177

第9章  使用枚举和结构创建值类型 201

第10章  使用数组 219

第11章  理解参数数组 243

第12章  使用继承 255

第13章  创建接口和定义抽象类 277

第14章  使用垃圾回收和资源管理 303

第Ⅲ部分  用C#定义可扩展类型

第15章  实现属性以访问字段 327

第16章  处理二进制数据和使用索引器 357

第17章  泛型概述 373

第18章  使用集合 403

第19章  枚举集合 427

第20章  分离应用程序逻辑并处理事件 441

第21章  使用查询表达式来查询内存中的数据 469

第22章  操作符重载 491

第Ⅳ部分  用C#构建UWP应用

第23章  使用任务提高吞吐量 511

第24章  通过异步操作提高响应速度 549

第25章  实现UWP应用的用户界面 587

第26章  在UWP应用中显示和搜索数据 627

第27章  在UWP应用中访问远程数据库 655

 

详细

第Ⅰ部分  Visual C#和Visual Studio 2022概述

第1章  欢迎进入C#编程世界 3

1.1  写第一个C#程序 3

1.2  开始在Visual Studio 2022环境中编程 8

1.3  用Visual Studio 2022写第一个程序 12

1.4  使用命名空间 17

1.5  命名空间和程序集 18

1.6  对代码进行注释 19

1.7  创建图形应用程序 19

1.7.1  探索通用Windows平台应用程序 28

1.7.2  向图形应用程序添加代码 31

小结 34

第1章快速参考 35

第2章  使用变量、操作符和表达式 37

2.1  理解语句 37

2.2  使用标识符 38

2.3  C#语言的关键字 38

2.4  使用变量 39

2.4.1  命名变量 39

2.4.2  声明变量 40

2.4.3  指定数值 40

2.5  使用基元数据类型 41

2.5.1  未赋值的局部变量 42

2.5.2  显示基元数据类型的值 42

2.6  使用算术操作符 47

2.6.1  操作符和类型 48

2.6.2  深入了解算术操作符 49

2.6.3  控制优先级 54

2.6.4  使用结合性对表达式进行求值 54

2.6.5  结合性和赋值操作符 55

2.7  变量递增和递减 56

2.8  声明隐式类型的局部变量 57

小结 58

第2章快速参考 58

第3章  方法和作用域 61

3.1  创建方法 61

3.1.1  声明方法 62

3.1.2  从方法返回数据 63

3.1.3  使用表达式主体方法 63

3.2  调用方法 65

3.2.1  方法的调用语法 65

3.2.2  从方法返回多个值 67

3.3  使用作用域 69

3.3.1  定义局部作用域 69

3.3.2  定义类作用域 70

3.3.3  重载方法 71

3.3.4  编写方法 71

3.4  使用Visual Studio调试器来调试方法 75

3.4.1  重构代码 80

3.4.2  嵌套方法 80

3.5  使用可选参数和具名参数 83

3.5.1  定义可选参数 84

3.5.2  传递具名参数 85

3.5.3  消除可选参数和具名参数的歧义 85

小结 90

第3章快速参考 90

第4章  使用判断语句 93

4.1  声明布尔变量 93

4.2  使用布尔操作符 94

4.2.1  理解相等和关系操作符 94

4.2.2  理解条件逻辑操作符 95

4.2.3  短路求值 95

4.2.4  操作符的优先级和结合性总结 96

4.2.5  模式匹配 97

4.3  使用if语句做判断 97

4.3.1  理解if语句的语法 97

4.3.2  使用代码块分组语句 99

4.3.3  嵌套if语句 100

4.4  使用switch语句做判断 105

4.4.1  理解switch语句的语法 105

4.4.2  遵守switch语句的规则 106

4.5  为switch表达式使用模式匹配 110

小结 112

第4章快速参考 112

第5章  使用复合赋值和循环语句 115

5.1  使用复合赋值操作符 115

5.2  编写while语句 116

5.3  编写for语句 120

5.4  编写do语句 122

小结 129

第5章快速参考 129

第6章  管理错误和异常 131

6.1  尝试执行代码并捕捉异常 132

6.1.1  未处理的异常 133

6.1.2  使用多个catch处理程序 134

6.1.3  捕捉多个异常 135

6.1.4  筛选异常 136

6.1.5  传播异常 139

6.2  使用checked和unchecked进行整数运算 141

6.2.1  编写checked语句 142

6.2.2  编写checked表达式 142

6.3  抛出异常 145

6.4  使用finally块 150

小结 151

第6章快速参考 151

第Ⅱ部分  理解C#对象模型

第7章  创建并管理类和对象 155

7.1  理解分类 155

7.2  封装的目的 156

7.3  定义并使用类 156

7.4  控制可访问性 158

7.5  使用构造器 159

7.5.1  重载构造器 160

7.5.2  解构对象 167

7.6  理解静态方法和数据 168

7.6.1  创建共享字段 169

7.6.2  使用const关键字创建静态字段 170

7.6.3  理解静态类 170

7.6.4  静态using语句 170

7.7  匿名类 173

小结 174

第7章快速参考 174

第8章  理解值和引用 177

8.1  复制值类型的变量和类 177

8.2  理解null值和可空类型 182

8.2.1  空条件操作符 184

8.2.2  使用可空类型 185

8.2.3  理解可空类型的属性 185

8.3  使用ref参数和out参数 186

8.3.1  创建ref参数 187

8.3.2  创建out参数 188

8.4  计算机内存的组织方式 190

8.4.1  使用栈和堆 191

8.4.2  System.Object类 192

8.4.3  装箱 192

8.4.4  拆箱 193

8.5  数据的安全转型 194

8.5.1  is操作符 195

8.5.2  as操作符 195

8.5.3  复习switch语句 196

小结 198

第8章快速参考 199

第9章  使用枚举和结构创建值类型 201

9.1  使用枚举 201

9.1.1  声明枚举 201

9.1.2  使用枚举 202

9.1.3  选择枚举字面值 203

9.1.4  选择枚举的基础类型 203

9.2  使用结构 205

9.2.1  声明结构 207

9.2.2  理解结构和类的区别 208

9.2.3  声明结构变量 209

9.2.4  理解结构的初始化 210

9.2.5  复制结构变量 214

小结 218

第9章快速参考 218

第10章  使用数组 219

10.1  声明数组变量 220

10.2  创建数组实例 220

10.3  填充和使用数组 221

10.3.1  创建隐式类型的数组 222

10.3.2  访问单独的数组元素 223

10.3.3  访问数组元素序列 223

10.3.4  遍历数组 224

10.3.5  数组作为方法的参数和返回值 225

10.4  复制数组 226

10.5  使用多维数组 228

10.6  访问包含值类型的数组 238

小结 241

第10章快速参考 241

第11章  理解参数数组 243

11.1  回顾重载 243

11.2  使用数组参数 244

11.2.1  声明参数数组 245

11.2.2  使用params object[] 247

11.2.3  使用参数数组 248

11.3  比较参数数组和可选参数 251

小结 253

第11章快速参考 253

第12章  使用继承 255

12.1  什么是继承 255

12.2  使用继承 256

12.2.1  复习System.Object类 258

12.2.2  调用基类构造器 258

12.2.3  类的赋值 259

12.2.4  声明新方法 260

12.2.5  声明虚方法 262

12.2.6  声明重写方法 263

12.2.7  理解受保护的访问 265

12.3  创建扩展方法 271

小结 274

第12章快速参考 274

第13章  创建接口和定义抽象类 277

13.1  理解接口 277

13.1.1  定义接口 278

13.1.2  实现接口 279

13.1.3  通过接口引用类 280

13.1.4  使用多个接口 281

13.1.5  显式实现接口 281

13.1.6  用接口进行版本控制 283

13.1.7  接口的限制 284

13.1.8  定义和使用接口 285

13.2  抽象类 293

13.3  密封类 295

13.3.1  密封方法 295

13.3.2  实现并使用抽象类 296

小结 301

第13章快速参考 302

第14章  使用垃圾回收和资源管理 303

14.1  对象生存期 303

14.1.1  编写终结器 304

14.1.2  为什么要使用垃圾回收器 306

14.1.3  垃圾回收器的工作原理 307

14.1.4  慎用终结器 308

14.2  资源管理 308

14.2.1  资源清理方法 309

14.2.2  异常安全的资源清理 309

14.2.3  using语句和IDisposable 接口 310

14.2.4  从终结器中调用Dispose方法 312

14.3  实现异常安全的资源清理 313

14.4  处理异步清理 322

小结 323

第14章快速参考 323

第Ⅲ部分  用C#定义可扩展类型

第15章  实现属性以访问字段 327

15.1  使用方法实现封装 327

15.2  什么是属性 329

15.2.1  使用属性 331

15.2.2  只读属性 332

15.2.3  只写属性 332

15.2.4  属性的可访问性 333

15.3  理解属性的局限性 334

15.4  在接口中声明属性 335

15.4.1  用属性替代方法 337

15.4.2  用属性进行模式匹配 340

15.5  生成自动属性 341

15.6  用属性初始化对象 343

15.7  用带属性的“记录”来实现轻量级结构 348

小结 352

第15章快速参考 353

第16章  处理二进制数据和使用索引器 357

16.1  什么是索引器 357

16.1.1  存储二进制值 358

16.1.2  显示二进制值 358

16.1.3  操纵二进制值 359

16.1.4  用索引器解决相同问题 360

16.2  理解索引器的访问器 362

16.3  对比索引器和数组 363

16.3  接口中的索引器 365

16.4  在Windows应用程序中使用索引器 366

小结 371

第16章快速参考 371

第17章  泛型概述 373

17.1  object的问题 373

17.2  泛型解决方案 377

17.2.1  对比泛型类和常规类 379

17.2.2  泛型和约束 379

17.3  创建泛型类 379

17.3.1  二叉树理论 379

17.3.2  使用泛型构造二叉树类 382

17.4  创建泛型方法 391

17.5  可变性和泛型接口 396

17.5.1  协变接口 397

17.5.2  逆变接口 399

小结 401

第17章快速参考 401

第18章  使用集合 403

18.1  什么是集合类 403

18.1.1  List<T>集合类 404

18.1.2  LinkedList<T>集合类 406

18.1.3  Queue<T>集合类 408

18.1.4  PriorityQueue<TElement, TPriority>集合类 409

18.1.5  Stack<T>集合类 410

18.1.6  Dictionary<TKey, TValue> 集合类 411

18.1.7  SortedList<TKey, TValue> 集合类 412

18.1.8  HashSet<T>集合类 413

18.2  使用集合初始化器 415

18.3  Find方法、谓词和Lambda 表达式 416

18.3.1  Lambda表达式的形式 417

18.3.2  Lambda表达式和匿名 方法 418

18.4  比较数组和集合 419

小结 423

第18章快速参考 424

第19章  枚举集合 427

19.1  枚举集合中的元素 427

19.1.1  手动实现枚举器 428

19.1.2  实现IEnumerable接口 433

19.2  用迭代器实现枚举器 435

19.2.1  一个简单的迭代器 435

19.2.2  使用迭代器为Tree<TItem> 类定义枚举器 437

小结 439

第19章快速参考 439

第20章  分离应用程序逻辑并处理事件 441

20.1  理解委托 442

20.2  .NET类库的委托例子 443

20.2.1  自动化工厂的例子 444

20.2.2  声明和使用委托 447

20.3  Lambda表达式和委托 455

20.4  启用事件通知 456

20.4.1  声明事件 456

20.4.2  订阅事件 457

20.4.3  取消订阅事件 458

20.4.4  引发事件 458

20.5  理解用户界面事件 459

20.6  使用事件 460

小结 466

第20章快速参考 466

第21章  使用查询表达式来查询内存中的数据 469

21.1  什么是LINQ 469

21.2  在C#应用程序中使用LINQ 470

21.2.1  选择数据 472

21.2.2  筛选数据 474

21.2.3  排序、分组和聚合数据 474

21.2.4  联接数据 476

21.2.5  使用查询操作符 478

21.2.6  查询Tree<TItem>对象中的数据 480

21.3  LINQ和推迟求值 485

小结 489

第21章快速参考 489

第22章  操作符重载 491

22.1  理解操作符 491

22.1.1  操作符的限制 492

22.1.2  重载的操作符 492

22.1.3  创建对称操作符 493

22.1.4  理解复合赋值 495

22.2  声明递增和递减操作符 495

22.3  比较结构和类中的操作符 496

22.4  定义成对的操作符 497

22.5  实现操作符 497

22.6  重载相等操作符 500

22.7  理解转换操作符 503

22.7.1  提供内建转换 503

22.7.2  实现用户自定义的转换操作符 504

22.7.3  再论创建对称操作符 505

22.7.4  编码转换操作符 506

小结 508

第22章快速参考 508

第Ⅳ部分  用C#构建UWP应用

第23章  使用任务提高吞吐量 511

23.1  使用并行处理执行多任务处理 511

23.2  多核处理器的崛起 512

23.3  用Microsoft .NET实现多任务处理 513

23.3.1  任务、线程和线程池 513

23.3.2  创建、运行和控制任务 515

23.3.3  使用Task类实现并行 处理 517

23.3.4  使用Parallel类对任务进行抽象 525

23.3.5  什么时候使用 Parallel类 529

23.4  取消任务和处理异常 531

23.4.1  协作式取消的原理 532

23.4.2  使用AggregateException类处理任务的异常 542

23.4.3  为Canceled和Faulted任务使用延续 543

小结 544

第23章快速参考 545

第24章  通过异步操作提高响应速度 549

24.1  实现异步方法 550

24.1.1  定义异步方法:问题 550

24.1.2  定义异步方法:解决 方案 553

24.1.3  定义返回值的异步方法 557

24.1.4  异步方法注意事项 558

24.1.5  异步方法和Windows Runtime API 560

24.1.6  任务、内存分配和效率 561

24.2  用PLINQ进行并行数据访问 564

24.2.1  用PLINQ增强遍历集合时的性能 564

24.2.2  取消PLINQ查询 568

24.3  同步对数据的并发访问 569

24.3.1  锁定数据 571

24.3.2  用于协调任务的同步 基元 572

24.3.3  取消同步 574

24.3.4  并发集合类 575

24.3.5  使用并发集合和锁实现线程安全的数据访问 575

小结 584

第24章快速参考 585

第25章  实现UWP应用的用户界面 587

25.1  UWP应用的特点 588

25.2  使用“空白应用”模板构建UWP应用 590

25.3  实现可伸缩用户界面 593

25.3.1  用Grid控件实现表格 布局 602

25.3.2  用可视状态管理器调整 布局 610

25.4  向UI应用样式 616

小结 626

第25章快速参考 626

第26章  在UWP应用中显示和搜索         数据 627

26.1  实现Model-View-ViewModel模式 627

26.2  通过数据绑定显示数据 628

26.2.1  通过数据绑定修改数据 633

26.2.2  为ComboBox控件使用数据 绑定 638

26.3  创建ViewModel 640

26.4  向ViewModel添加命令 643

小结 653

第26章快速参考 653

第27章  在UWP应用中访问远程数据库 655

27.1  从数据库获取数据 655

27.1.1  创建实体模型 664

27.1.2  创建并使用REST Web 服务 669

27.2  更新UWP应用来使用Web 服务 683

27.3  在Customers应用中查找数据 693

27.4  通过REST Web服务插入、更新和删除数据 699

小结 700

第27章快速参考 701

作者简介

编辑推荐

基于Visual Studio 2022的Visual C#基础实践指南 

扩展专业能力,通过自主学习,完全掌握Visual C#编程基础知识。本书基于Visual Studio 2022,提供指导方针、练习和代码来帮助软件开发人员构建几乎可以在任何地方运行的高响应性、高伸缩性的云端应用。

作者寄语

约翰 ? 夏普 (John Sharp)

微软MVP,资深技术作家,Content Master(英国CM集团的分支机构)的首席技术专家。作者拥有伦敦帝国理工学院的计算机荣誉学士学位。过去27年,他一直致力于软件开发和培训教程与课程的写作。作者拥有丰富的技术资历,精通数据库系统、UNIX、C、C++和C#应用开发。他还开发过Java和JavaScript应用,用Windows Azure设计企业级方案。

周  靖

微软MVP(最有价值专家),技术型资深译者。涉猎广泛,具有深厚的技术功底和良好的文学素养。早期痴迷于硬件,曾多年担任《微型计算机》杂志特约作者。继而潜心钻研程序设计并在这方面积累了丰富的经验。翻译风格严谨、准确、朴实、流畅,深受读者好评。代表译著有《C++入门经典》(**版第10版)、《Windows核心编程》(**版第5版)、《CLR via C》(**版第4版)和《Visual C#从入门到精通》(**版第10版)等。

电子资料

www.luweidong.cn

下一个