译者简介
叶伟民
拥有19年.NET软件开发经验
《.NET内存管理宝典》等6本书的译者
《精通Neo4j》一书作者之一
广州.NET俱乐部主席
全国各地.NET社区名录维护者之一
广州神机妙算大数据科技有限公司CEO
美国硅谷海归
作 者 简 介
Mark J. Price是一位拥有20多年C#编程经验的微软认证技术专家,他专注于C#编程以及构建Azure云解决方案。自1993年以来,Mark已通过了80多次微软编程考试,他特别擅长传道授业。从2001年到2003年,Mark在美国雷德蒙德全职为微软编写官方课件。当C#还处于alpha版本时,他的团队就为C#编写了第一个培训教程。在微软任职期间,他为培训师上课,指导微软认证培训师快速掌握C#和.NET。Mark工作中的大部分时间都在培训各类学生,从16岁的新人到70岁的退休人员,其中大部分是专业开发人员。Mark拥有计算机科学学士学位。
感谢所有读者,你们的支持让我能够有机会撰写这些图书。
特别感谢通过我的GitHub存储库、邮件或者在Discord上与我和本书的社区进行交流并提供反馈的那些读者。你们让我的图书在新版本中变得更好。
尤其要感谢Troy,他从本书的读者成为我的同事,更重要的是,成了我的好朋友。
审校者简介
Troy Martin通过自学成为一名开发人员。Troy从事开发工作已经超过10年了,近几年主要关注C#。Troy对编程有强烈的兴趣,已经获得了超过20项关于多种语言和游戏开发引擎的认证。Troy目前致力于开发自己的第一个独立游戏项目,以及帮助其他人实现自己的编程目标。
Troy想对女朋友Haley说声感谢,她在Troy最低谷的时候也一直陪伴和支持Troy。
另外,对本书的作者Mark Price,Troy也要表达最深的谢意。在审校本书的过程中,他提供了许多有用的信息,他是一位很好的朋友。
前 言
有些C#书籍长达数千页,旨在全面介绍C#编程语言、.NET库和应用程序模型(如网站、服务、桌面应用和移动应用)。
本书与众不同,内容简洁清晰、行文流畅,每个主题都配有实际动手演练项目。进行总体叙述的广度是以牺牲一定深度为代价的,但如果愿意,你就会发现许多主题都值得进一步探索。
本书也是一本循序渐进的学习指南,可用于通过跨平台的.NET学习现代C#实践,并简要介绍Web开发的基础知识,以及可以使用它们构建的网站和服务。本书最适合C#和.NET初学者阅读,也适合学过C#但感觉在过去几年自身技术已落伍的程序员阅读。
如果有使用旧版本C#语言的经验,那么可以在2.1节查看介绍新语言特性的表格,并直接跳到相应的部分阅读。
如果有使用较旧版本的.NET库的经验,那么可以在7.1节查看新库特性。
本书将指出C#和.NET的一些优缺点,让你能够在同事面前留下深刻的印象,并快速提高工作效率。本书的解释不会事无巨细,以免因放慢速度导致读者感到无聊,而是假设读者足够聪明,能够自行对一些初、中级程序员需要了解的主题进行搜索和解释。
一些章节提供了链接,想要了解更多细节的读者可以访问这些链接,查看仅在线提供的一些相关内容。
本书内容
第1章介绍如何设置开发环境,以使用Visual Studio 2022、Visual Studio Code及C# DevKit。然后将介绍如何在这些环境中使用C#和.NET创建最简单的应用程序。对于简化的控制台应用程序,将使用C# 9中引入的顶级程序功能。在C# 10及更高版本中,项目模板默认使用了顶级程序功能。该章还介绍了可以从哪里寻求帮助,包括ChatGPT和GitHub Copilot等AI工具,以及与我联系的方式,以便在某个问题上获得帮助,或者向我提供反馈,使我能够在GitHub存储库或将来的印刷版本中改进本书。
第2章介绍C#的版本。该章将解释C#日常用来为应用程序编写源代码的语法和词汇。特别是,该章将讲述如何声明和处理不同类型的变量。
第3章讨论如何使用操作符对变量执行简单的操作,包含比较,编写决策代码,模式匹配,以及重复语句块和类型之间的转换。
第4章讲述如何遵循Don’t Repeat Yourself (不要重复自己,DRY)原则,使用命令式和函数式风格编写可重用的函数。在该章你将学习使用调试工具来跟踪和删除bug,利用热加载在应用程序运行过程中进行修改,在执行代码时监视代码以诊断问题,以及在将代码部署到生产环境之前严格测试代码,以删除bug并确保稳定性和可靠性。该章还介绍在不可避免地发生错误时,如何编写防御性代码来处理这些错误,包括在ArgumentOutOfRangeException类上使用.NET 8引入的ThrowIfLessThan等守卫语句。
第5章讨论类可以拥有的所有不同类别的成员,包括存储数据的字段和执行操作的方法。你将使用面向对象编程(Object-Oriented Programming,OOP)概念,如聚合和封装,并学习如何管理类型的名称空间,包括C# 12引入的为任何类型创建别名的能力。你将学习一些语言特性,比如元组语法支持和out变量,局部函数,默认的字面值和推断出的元组名称,以及如何使用C# 9中引入的record关键字、init-only属性和with表达式来定义和使用不可变类型。该章还将介绍C# 11引入的required关键字,它可以帮助避免过度使用构造函数来控制初始化,以及C# 12为非记录类型引入的主构造函数。
第6章解释如何使用OOP从现有类型派生出新的类型。在该章你将学习如何定义操作符、委托和事件,如何实现关于基类和派生类的接口,如何覆盖类型成员以及使用多态性,如何创建扩展方法,如何在继承层次结构中的类之间进行转换,以及C# 8中引入的可空引用类型带来的巨大变化,并且在C# 10及更高版本中使其成为默认类型。
第7章将介绍与.NET Standard兼容的.NET类型以及它们与 C#的关系。在该章你将学习如何在任何受支持的操作系统(Windows、macOS和Linux变体)上编写和编译代码,如何打包、部署和分发自己的应用程序和库。你可以学习如何使用遗留的.NET Framework库,如何将遗留的.NET Framework代码库移植到现代.NET,以及关于源代码生成器和如何创建它们的知识。
第8章讨论允许代码执行常见实际任务的类型,例如操作数字和文本、在集合中存储项和通过低级类型使用网络。 在该章你将学习正则表达式,让正则表达式变得更容易编写的一些改进方法,以及如何使用源代码生成器来提高它们的性能。
第9章讨论与文件系统的交互、对文件和流的读写、文本编码、诸如JSON和XML的序列化格式,还涉及改进的功能以及System.Text.Json类的性能问题。如果你使用Linux,那么可能会对如何在代码中处理tar存档感兴趣,你可通过该章了解相关知识。
第10章解释如何使用名为Entity Framework Core (EF Core)的ORM技术来读写关系数据库,如Microsoft SQL Server和SQLite。在该章你将了解如何使用数据库优先模型定义映射到数据库中现有表的实体模型,如何定义可以在运行时创建表和数据库的“代码优先”模型,以及如何使用事务将多个修改组合起来。
第11章介绍LINQ。LINQ语言扩展增加了处理条目序列、筛选、排序,以及将它们投影到不同输出的能力。介绍.NET 6中新引入的LINQ方法,如TryGetNonEnumeratedCount和DistinctBy,以及.NET 7中新引入的LINQ方法,如Order和OrderDescending。该章的在线小节介绍了如何使用并行LINQ (PLINQ),如何使用LINQ to XML,以及如何创建自己的LINQ扩展方法。
第12章介绍可以使用C#和.NET构建的Web应用程序的类型。该章还将通过构建EF Core模型来表示虚构组织Northwind的数据库。Northwind数据库将贯穿用于本书的剩余部分。最后,介绍了常用的Web技术。
第13章介绍在服务器端通过ASP.NET Core使用现代HTTP架构构建网站的基础知识。在该章你将学习如何实现一种ASP.NET Core特性(Razor Pages),从而简化为小型网站创建动态网页的过程,还将学习如何构建HTTP请求和响应管道。该章的两个在线小节介绍了如何使用Razor类库来重用Razor Pages,以及如何在网站项目中启用HTTP/3。
第14章解释如何使用ASP.NET Core Web API构建后端REST体系结构Web服务。讨论如何使用OpenAPI记录和测试它们,以及如何使用工厂实例化的HTTP客户端正确地使用它们。该章介绍了一些高级特性,如健康检查、添加安全性HTTP头和最小API,以及如何在发布过程中使用原生的提前(AOT)编译,从而缩短启动时间和减少内存占用。
第15章介绍如何使用Blazor构建Web用户界面组件,这些组件既可以在服务器端执行,又可以在Web浏览器中执行。该章还讨论如何使用.NET 8新引入的托管模型,构建能够容易地在客户端和服务器之间进行切换的组件。
第16章“结语”针对进一步学习C#和.NET提供了一些选项。
附录A中提供了各章练习的答案(在线提供)。
本书在线提供了一章“使用MVC模式构建网站”,介绍如何利用ASP.NET Core MVC以一种易于进行单元测试和管理的方式构建大型、复杂的网站。你将了解启动配置、身份验证、路由、模型、视图和控制器。在这里还将了解一种.NET社区热切期盼并最终在ASP.NET Core 7中实现的特性:输出缓存。可扫描封底二维码下载该章的中文版。
要做的准备工作
可在许多平台上使用Visual Studio Code 和命令行工具开发和部署C#和.NET应用程序,包括Windows、macOS和各种Linux发行版。只需要一个支持Visual Studio Code和互联网连接的操作系统就可以学习本书的内容。
如果更喜欢其他选项,那么可以自由选择使用Visual Studio 2022,或者JetBrains Rider这样的第三方工具。
下载示例代码、彩色图片、附录A
本书代码可通过扫描封底的二维码进行下载。书中的一些屏幕截图和图表用彩色效果可能更佳,为此,我们专门制作了一份PDF文件,读者可通过扫描封底二维码下载该文件。另外,本书附录A给出了各章练习的答案,读者可通过扫描封底的二维码进行下载。