零、前言
有数千页长的编程书籍,旨在成为 C# 语言、.NET 库、网站、服务、桌面和移动应用等应用模型的综合参考。
这本书不一样。它简洁明了,旨在成为一本轻快有趣的书,每一个主题都有实用的实践演练。总体叙述的广度是以某种深度为代价的,但如果你愿意,你会发现许多路标需要进一步探索。
这本书同时是一个逐步指导学习现代 C# 使用跨平台.NET 验证实践的指南,并简要介绍了可以使用它们构建的主要类型的实际应用。这本书最适合 C# 和.NET 的初学者,或者那些在过去使用过 C# 但在过去几年的变化中感觉落后的程序员。
如果您已经有过使用旧版本 C# 语言的经验,那么在第 2 章的第一节中,您可以查看新语言功能的表格并直接跳到它们。
如果您已经有了使用旧版本.NET 库的经验,那么在第 7 章的第一节打包和分发.NET 类型中,您可以查看新库功能的表并直接跳到它们。
我将指出 C# 和.NET 的酷的角落和陷阱,这样你就可以给同事留下深刻印象并快速提高工作效率。我认为你足够聪明,可以用谷歌搜索相关主题的解释,而不必包含在初级到中级指南中,因为该指南在印刷本中的空间有限。
在哪里可以找到代码解决方案
您可以通过以下链接从 GitHub 存储库下载分步指导任务和练习的解决方案:https://github.com/markjprice/cs10dotnet6 。
如果你不知道怎么做,那么我会在第 1 章、的末尾给出如何做的说明,你好,C#!欢迎使用.NET!。
这本书涵盖的内容
第一章、你好,C#!欢迎使用.NET!是关于设置您的开发环境,并使用 Visual Studio 或 Visual Studio 代码创建使用 C# 和.NET 可能最简单的应用。对于简化的控制台应用,您将看到 C# 9 中引入的顶级程序功能的使用。为了学习如何编写简单的语言结构和库功能,您将看到.NET 交互式笔记本的使用。您还将了解一些寻求帮助的好地方,以及如何与我联系以获得有关某个问题的帮助,或通过 GitHub 存储库向我提供反馈以改进本书和未来版本。
*第 2 章**讲 C#*,介绍了 C# 的版本,并有表格显示了哪些版本引入了新功能。我将解释您每天编写应用源代码时使用的语法和词汇。特别是,您将学习如何声明和使用不同类型的变量。
第 3 章**控制流、转换类型和处理异常涵盖了使用运算符对变量执行简单操作,包括比较、编写决策代码、C# 7 到 C# 10 中的模式匹配、重复语句块以及类型之间的转换。它还包括在不可避免地发生异常时编写代码以防御性地处理异常。
第 4 章**编写、调试和测试函数是关于遵循不要重复自己(DRY原则,使用命令式和功能实现风格编写可重用函数。您还将学习如何使用调试工具跟踪和删除 bug,在代码执行时监视代码以诊断问题,并严格测试代码以删除 bug,确保在将其部署到生产环境之前的稳定性和可靠性。
第 5 章**使用面向对象编程构建您自己的类型,讨论了类型可以拥有的所有不同类型的成员,包括存储数据的字段和执行操作的方法。您将使用面向对象编程(OOP等概念,如聚合和封装。您将了解一些语言功能,如元组语法支持和out
变量、默认文本和推断的元组名称,以及如何使用 C# 9 中引入的record
关键字、init
纯属性和with
表达式定义和使用不可变类型。
第 6 章**实现接口和继承类,解释了使用 OOP 从现有类型派生新类型。您将学习如何定义运算符和本地函数、委托和事件、如何实现基类和派生类的接口、如何重写类型的成员、如何使用多态性、如何创建扩展方法、如何在继承层次结构中的类之间强制转换,随着可空引用类型的引入,C# 8 发生了巨大的变化。
第 7 章**打包和分发.NET 类型,介绍了.NET 的版本,并有表格显示哪些版本引入了新的库功能,然后展示了符合.NET 标准的.NET 类型以及它们与 C# 的关系。您将学习如何在任何受支持的操作系统(Windows、macOS 和 Linux 变体)上编写和编译代码。您将学习如何打包、部署和分发自己的应用和库。
第 8 章**使用常见的.NET 类型,讨论了允许代码执行常见实际任务的类型,如操作数字和文本、日期和时间、在集合中存储项目、使用网络和操作图像以及实现国际化。
第 9 章**涉及文件、流和序列化的内容包括与文件系统的交互、对文件和流的读写、文本编码以及 JSON 和 XML 等序列化格式,包括改进的System.Text.Json
类的功能和性能。
第 10 章**使用实体框架核心处理数据,说明了使用名为实体框架核心**的对象关系映射(ORM技术对关系数据库(如 Microsoft SQL Server 和 SQLite)的读写 EF 核心**。您将学习如何定义映射到数据库中现有表的实体模型,以及如何定义可以在运行时创建表和数据库的代码优先模型。
第 11 章**使用 LINQ查询和操作数据,向您介绍了语言集成查询(LINQs)——语言扩展,它增加了处理项目序列的能力,并对其进行过滤、排序和投影到不同的输出中。您将了解并行 LINQ(PLINQ)和 LINQ 到 XML 的特殊功能。
第 12 章**使用多任务处理提高性能和可扩展性讨论了允许多个操作同时发生,以提高性能、可扩展性和用户生产力。您将了解async Main
特性以及如何使用System.Diagnostics
名称空间中的类型来监控代码,以衡量性能和效率。
第 13 章**介绍 C# 和.NET 的实际应用,向您介绍可以使用 C# 和.NET 构建的跨平台应用的类型。您还将构建一个 EF 核心模型来表示 Northwind 数据库,该数据库将在本书的其余章节中使用。
第 14 章**使用 ASP.NET Core Razor Pages 构建网站是关于学习在服务器端使用 ASP.NET Core 构建具有现代 HTTP 架构的网站的基础知识。您将学习如何实现称为 Razor Pages 的 ASP.NETCore 功能,它简化了为小型网站创建动态网页的过程,以及如何构建 HTTP 请求和响应管道。
第 15 章**使用模型-视图-控制器模式构建网站,是关于学习如何以易于单元测试和管理的方式与使用 ASP.NETCore MVC 的程序员团队构建大型复杂网站。您将了解启动配置、身份验证、路由、模型、视图和控制器。
第 16 章**构建和使用 Web 服务解释了使用 ASP.NETCore Web API 构建后端 REST 架构 Web 服务,以及如何使用工厂实例化的 HTTP 客户端正确使用它们。
第 17 章**使用 Blazor构建用户界面,介绍如何使用 Blazor 构建可在服务器端或客户端 web 浏览器内部执行的 web 用户界面组件。您将看到 Blazor 服务器和 Blazor WebAssembly 之间的区别,以及如何构建更易于在两个托管模型之间切换的组件。
三个额外的在线章节完成了这个丰收版。您可以在阅读以下章节和附录 https://static.packt-cdn.com/downloads/9781801077361_Bonus_Content.pdf :
第 18 章**构建和消费专业服务向您介绍了使用 gRPC 构建服务、使用 Signal 实现服务器和客户端之间的实时通信、使用 OData 公开 EF 核心模型以及在云中使用 Azure 功能响应触发器的托管功能。
第 19 章**使用.NET 毛伊岛构建移动和桌面应用,介绍如何为 Android、iOS、macOS 和 Windows 构建跨平台移动和桌面应用。您将学习 XAML 的基础知识,XAML 可用于定义图形应用的用户界面。
第 20 章**保护您的数据和应用是关于保护您的数据不被恶意用户使用加密查看,以及不被哈希和签名操纵或破坏。您还将了解身份验证和授权,以保护应用免受未授权用户的攻击。
附录**考试答案您的知识问题在每章末尾都有考试问题的答案。
这本书你需要什么
您可以在许多平台上使用 Visual Studio 代码开发和部署 C# 和.NET 应用,包括 Windows、macOS 和多种 Linux。
一个支持 VisualStudio 代码和 internet 连接的操作系统是完成除一章以外的所有章节所需的全部内容。
如果您喜欢使用 VisualStudioforWindows 或 macOS,或者像 JetBrains Rider 这样的第三方工具,那么您可以。
您需要 macOS 在第 19 章**中构建 iOS 应用,使用.NET MAUI构建移动和桌面应用,因为您必须拥有 macOS 和 Xcode 才能编译 iOS 应用。
下载本书的彩色图像
我们还为您提供了一个 PDF 文件,其中包含本书中使用的屏幕截图和图表的彩色图像。彩色图像将帮助您更好地了解输出中的更改。
您可以从下载此文件 https://static.packt-cdn.com/downloads/9781801077361_ColorImages.pdf 。
习俗
在本书中,您将发现许多文本样式可以区分不同类型的信息。下面是这些风格的一些例子,并解释了它们的含义。
CodeInText
:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。例如Controllers
、Models
和Views
文件夹包含 ASP.NETCore 类和要在服务器上执行的.cshtml
文件
代码块设置如下:
// storing items at index positions
names[0] = "Kate";
names[1] = "Jack";
names[2] = "Rebecca";
names[3] = "Tom";
当我们希望提请您注意代码块的特定部分时,会突出显示相关行或项目:
// storing items at index positions
names[0] = "Kate";
**names[****1****] =** **"Jack"****;**
names[2] = "Rebecca";
names[3] = "Tom";
任何命令行输入或输出的编写方式如下:
dotnet new console
粗体:表示一个新的术语、一个重要的单词,或者您在屏幕上看到的单词,例如,在菜单或对话框中。例如:“点击下一个按钮,您将进入下一个屏幕。”
重要的注释和指向进一步阅读的外部来源的链接显示在这样一个框中。
良好实践:关于如何像专家一样编程的建议如下。
注:通过阅读原文或者在浏览器中打开 https://csharp.apachecn.org/#/docs/cs10-dnet6-modern-cross-plat-dev/README