首页 > 图书中心 >图书详情

C#高级编程(第11版) C# 7 & .NET Core 2.0

C#专家级指南,是经验丰富的程序员提高效率的更快捷方式! 连续畅销20年,累计销售超30万册, 第11次全新升级,更新至C# 7 和 .NET Core 2.0, C# 7内幕指南。

作者:[美]克里斯琴·内格尔(Christian Nagel)著 李 铭 译
丛书名:开源.NET生态软件开发
定价:198
印次:1-4
ISBN:9787302522560
出版日期:2019.03.01
印刷日期:2022.04.01

★为需要新工具的高级开发人员介绍了C# 7和.NET Core 2.0的扩展新特性 ★揭示了Visual Studio 2017的新技巧和切合实际的提示,包括新的用户界面、新增的模板、编辑器的改进等 ★论述了计划工作流的全新方式,使编码更快,诊断和调试更精确,测试更频繁,发布更自信 ★为开发在Android、iOS、Windows、Linux、网络和云上运行的应用程序提供了循序渐进的指南 ★掌握Visual Studio的高效率特性,以加速AI革新

more >

前 言 许多年过去了,.NET 有了新的发展势头。.NET Framework 有一个年轻的兄弟.NET Core! .NET Framework 是封闭的源代码,只能在Windows 系统上使用。现在.NET Core 是开源的,可以在Linux 上使用,并且使用现代模式。在.NET 生态系统中有很多巨大的改进。 注意: 由于最近的变化,C#在最受欢迎的编程语言中排名前十,而.NET Core 在最受欢迎的框架中排名第三。在Web和桌面开发人员中,C#在最流行的语言中排名第三。详情请登录https://insights.stackoverflow.com/ survey/ 2017。 使用C#和ASP .NET Core,可以创建运行在Windows、Linux和Mac上的Web应用程序和服务。使用Windows Runtime(Windows 运行库),可以通过C#和XAML 以及.NET Core 创建本机Windows 应用程序(也称为通用Windows 平台,UWP)。通过Xamarin,使用C#和XAML可以创建运行在Android 和iOS设备上的应用程序。 在.NET Standard 的帮助下,可以创建能在ASP.NET Core、Windows 应用、Xamarin 中共享的库,还可以创建传统的Windows Forms 和WPF 应用程序。所有这些都在本书中介绍。 本书大部分示例都建立在带有Visual Studio 的Windows 系统上。许多示例也在Linux 上进行了测试,并在Linux 和Mac 上运行。除了Windows 应用程序示例之外,还可以使用Mac 的Visual Studio Code 或Visual Studio for the Mac作为开发环境。 0.1 .NET Core的世界 .NET 有很长的历史,但是.NET Core 很年轻。.NET Core 2.0 从.NET Framework 中获得了许多新的API,使其更容易将现有的.NET Framework 应用程序迁移到.NET Core 的新世界。 一个简单的步骤是,可以创建使用.NET Standard 2.0 的库,这些库可以在.NET Framework 4.6.1 及以上版本的应用程序、.NET Core 2.0 应用程序和Windows Build 16299 以上版本的应用程序中使用。 现在,没有理由不在后端使用ASP.NET Core。随着迁移到.NET Standard 的简化,越来越多的库可以在.NET Core 中使用。总体来看,ASP.NET Core MVC 与ASP.NET MVC 非常相似。然而ASP.NET Core MVC 要灵活得多,使用.NET Core 模式时更容易操作,也更容易扩展。 对于创建新的Web 应用程序,可能只需要使用新技术Razor Pages。如果应用程序增长,Razor Pages 可以很容易地扩展到使用ASP .NET Core MVC 的模型-视图-控制器模式。 在撰写本文时,用于实时通信的技术SignalR 的.NET Core 版本即将发布。 ASP.NET Core 与JavaScript 技术(如Angular 和React/Redux)的结合非常有效,甚至还有模板使用这些技术以及用于后端服务的ASP.NET Core 创建项目。 注意: 可以通过https://github.com/dotnet/corefx 访问.NET Core 的源代码。.NET Core 命令行可以在https://github.com/dotnet/cli 上使用。在https://github.com/aspnet 上有许多ASP.NET Core 的存储库。其中包括ASP.NET Core MVC、Razor、SignalR、EntityFrameworkCore 等。 下面是对.NET Core 部分特性的总结: ● .NET Core 是开源的。 ● .NET Core 使用现代模式。 ● .NET Core 支持在多个平台上开发。 ● ASP.NET Core 可以在Windows 和Linux 上运行。 使用.NET Core 时,会发现这项技术是.NET 自从第一个版本以来最大的改变。.NET Core 是一个新的开始,从这里可以继续我们的旅程,快速进行新的开发。 0.2 C#的重要性 C#在2002 年发布时,是一个用于.NET Framework 的开发语言。C#的设计思想来自C++、Java 和Pascal。 Anders Hejlsberg 从Borland 来到微软公司,带来了开发Delphi 语言的经验。Hejlsberg 在微软公司开发了Java的Microsoft 版本J++,之后创建了C#。 注意: Anders Hejlsberg 现在已经转移到TypeScript(而他仍在影响C#), Mads Torgersen 是C#的项目负责人。C#的改进可以在https://github.com/dotnet/csharplang 上公开讨论。在这里,可以阅读C#语言建议和会议记录,也可以提交自己的C#建议。 C#一开始不仅作为一种面向对象的通用编程语言,而且是一种基于组件的编程语言,支持属性、事件、特性(注解)和构建程序集(包括元数据的二进制文件)。 随着时间的推移,C#增强了泛型、语言集成查询(Language Integrated Query,LINQ)、lambda 表达式、动态特性和更简单的异步编程。C#编程语言并不简单,它提供了很多功能,而且实际使用的功能在不断进化。因此,C#不仅是面向对象或基于组件的语言,它还包括函数式编程的理念,开发各种应用程序的通用语言会实际应用这些理念。 在C# 6 中,编译器的源代码完全重写了。不仅新的编译器管道可以在自定义程序中使用,微软还获得了一些新的资源,使变更不会破坏程序的其他部分。因此,增强编译器变得容易了。 C# 7 再次添加了许多具有函数编程背景的新特性,如本地函数、元组和模式匹配。 0.3 C# 7 的新特性 C# 6 扩展包括static using、基于表达式体的方法和属性、自动实现的属性初始化器、只读自动属性、nameof操作符、空条件运算符、字符串插入、字典初始化器、异常过滤器以及catch 中等待。C# 7 的新特性是什么? 0.3.1 数字分隔符 数字分隔符使代码更具可读性。在声明变量时可以给单独的数字添加_。编译器只是删除_。下面的代码片段在C# 7 中看起来更具可读性: C# 6 long n1 = 0x1234567890ABCDEF; C# 7 long n2 = 0x_1234_5678_90AB_CDEF ; 在C# 7.2 中,也可以把“_”放在开头。 C# 7.2 long n2 = 0x_1234_5678_90AB_CDEF ; 数字分隔符在第2 章介绍。 0.3.2 二进制字面值 C# 7 为二进制提供了一个新的字面值。二进制的值只能是0 和1。现在数字分隔符变得尤为重要: C# 7 u int binary1 = 0b1111_0000_1010_0101_1111_0000_1010_0101; 二进制字面值在第2 章介绍。 0.3.3 表达式体的成员 C# 6 允许使用表达式体的方法和属性。在C# 7 中,表达式体可以与构造函数、析构函数、本地函数、属性访问器等一起使用。这里可以看到属性访问器在C# 6 和C# 7 之间的区别: C# 6 private string _firstName; public string FirstName { get { return _firstName; } set { Set(ref _firstName, value); } } C# 7 private string _firstName; public string FirstName { get => _firstName; set => Set(ref _firstName, value); } 表达式体的成员在第3 章介绍。 0.3.4 out 变量 在C# 7 之前,out 变量必须在使用之前声明。而在C# 7 中,代码减少了一行,因为变量可以在使用时声明: C# 6 string n = "42"; int result; if (string.TryParse(n, out result) { Console.WriteLine($"Converting to a number was successful: {result}"); } C# 7 string n = "42"; if (string.TryParse(n, out var result) { Console.WriteLine($"Converting to a number was successful: {result}"); } 这个特性在第3 章介绍。 0.3.5 不拖尾的命名参数 C#支持可选参数需要的命名参数,但在任何情况下都可以支持可读性。C# 7.2 支持不拖尾的命名参数。参数名可以添加到C# 7.2 的任何参数中: C# 7.0 if (Enum.TryParse(weekdayRecommendation.Entity, ignoreCase: true, result: out DayOfWeek weekday)) { reservation.Weekday = weekday; } C# 7.2 if (Enum.TryParse(weekdayRecommendation.Entity, ignoreCase: true, out DayOfWeek weekday)) { reservation.Weekday = weekday; } 命名参数在第3 章介绍。 0.3.6 只读结构 结构应该是只读的(有一些例外)。在C# 7.2 中,可以使用readonly 修饰符声明结构体,因此编译器可以验证结构体没有更改。编译器也可以使用此保证,不复制作为参数传递给它的结构,但把它传递为引用: C# 7.2 public readonly struct Dimensions { public double Length { get; } public double Width { get; } public Dimensions(double length, double width) { Length = length; Width = width; } p ublic double Diagonal => Math.Sqrt(Length * Length + Width * Width); } 只读结构在第3 章介绍。 0.3.7 in 参数 C# 7.2 还允许给参数使用in 修饰符。这就保证了所传递的值类型不会更改,并可以通过引用来传递,以避免复制: C# 7.2 static void CantChange(in AStruct s) { // s can't change } ref、in 和 out 修饰符在第3 章介绍。 0.3.8 Private Protected C# 7.2 添加了一个新的访问修饰符private protected。如果某成员用于同一程序集中的类型,或派生自类的另一个程序集的类型,那么访问修饰符protected internal 允许访问它。使用private protected 时,上述两个条件使用AND 而不是OR——只有当类派生自基类,且位于同一程序集中时,才允许访问。 访问修饰符在第4 章中介绍。 0.3.9 目标类型的default 在C# 7.1 中,定义了default 字面值,与default 操作符相比,它允许使用更短的语法。default 操作符总是需要类型的重复,现在不再需要了。这适用于复杂类型: C# 7.0 int x = default(int); ImmutableArray<int> arr = default(ImmutableArray<int>) ; C# 7.1 int x = default; I mmutableArray<int> arr = default; default 字面值在第5 章介绍。 0.3.10 本地函数 在C# 7 之前,不可能在方法中声明函数。而可以创建一个lambda 表达式并调用它,如C# 6 代码片段所示: C# 6 public void SomeFunStuff() { Func<int, int, int> add = (x, y) => x + y; int result = add(38, 4); Console.WriteLine(result); } 在C# 7 中,可以在方法中声明一个本地函数。本地函数只能在方法的作用域内访问: C# 7 public void SomeFunStuff() { int add(int x, int y) => x + y; i nt result = add(38, 4); Console.WriteLine(result); } 本地函数在第13 章解释。本书的几个章节介绍了它的不同用途。 0.3.11 元组 元组允许组合不同类型的对象。在C# 7 之前,元组是.NET Framework 中的Tuple 类。可以使用Item1、Item2、Item3 等访问元组的成员。在C# 7 中,元组是该语言的一部分,可以定义成员的名称: C# 6 var t1 = Tuple.Create(42, "astring"); int i1 = t1.Item1; string s1 = t1.Item2; C# 7 var t1 = (n: 42, s: "magic"); int i1 = t1.n; s tring s1 = t1.s; 除此之外,新的元组是值类型(ValueTuple),而Tuple 类型是引用类型。元组的所有更改都包含在第13 章中。 0.3.12 推断的元组名 C# 7.1 通过自动推断元组名称来扩展元组,类似于匿名类型。在C# 7.0 中,元组的成员总是需要命名。如果元组成员的名称应该与分配给它的属性或字段相同,那么在C# 7.1 中,如果不提供名称,它就与分配给它的成员的名称相同: C# 7.0 var t1 = (FirstName: racer.FirstName, Wins: racer.Wins); int wins = t1.Wins ; C# 7.1 var t1 = (racer.FirstName, racer.Wins); i nt wins = t1.Wins; 0.3.13 拆解 不,这不是打印错误。拆解不是析构函数。元组可以拆解成独立的变量,例如: C# 7 ( int n, string s) = (42, "magic"); 如果定义了Deconstruct 方法,也可以拆解Person 对象: C# 7 var p1 = new Person("Tom", "Turbo"); ( string firstName, string lastName) = p1; 拆解在第13 章介绍。 0.3.14 模式匹配 使用模式匹配,is 操作符和switch 语句增强为三种模式:const 模式、类型模式和var 模式。下面的代码片段显示了使用is 操作符的模式。第一个检查匹配常数42,第二个检查Person 对象,第三个用var 模式检查每个对象。使用类型和var 模式,可以为强类型访问声明一个变量: C# 7 public void PatternMatchingWithIsOperator(object o) { if (o is 42) { } if (o is Person p) { } if (o is var v1) { } } 通过switch 语句,可以对case 子句使用相同的模式。如果模式匹配,则可以将变量声明为强类型。也可以在以下条件下使用when 过滤模式: C# 7 public void PatternMatchingWithSwitchStatement(object o) { switch (o) { case 42: break; break; case Person p: break; case var v: break; } } 模式匹配在第13 章中介绍。 0.3.15 Throw 表达式 抛出异常只有在语句中才可行,在表达式中是不可行的。因此,当使用构造函数接收参数时,需要对null进行额外的检查,才能抛出ArgumentNullException 异常。在C# 7 中,可以在表达式中抛出异常,因此可以使用合并操作符在左侧为null 时抛出ArgumentNullException 异常。 C# 6 private readonly IBooksService _booksService; public BookController(BooksService booksService) { if (booksService == null) { throw new ArgumentNullException(nameof(b)); } _booksService = booksService; } C# 7 private readonly IBooksService _booksService; public BookController(BooksService booksService) { _booksService = booksService ?? throw new ArgumentNullException(nameof(b)); } Throw 表达式在第14 章中介绍。 0.3.16 异步Main()方法 在C# 7.1 之前,Main()方法总是需要声明为类型void。在C# 7.1 中,Main()方法也可以是Task 类型,使用async 和await 关键字: C# 7.0 static void Main() { SomeMethodAsync().Wait(); } C# 7.1 async static Task Main() { await SomeMethodAsync(); } 异步编程在第15 章介绍。 0.3.17 引用语义 .NET Core 主要关注性能的提高。为引用语义添加C#特性有助于提高性能。在C# 7 之前,ref 关键字可以与参数一起使用,通过引用传递值类型。现在也可以对返回类型和本地变量使用ref 关键字。 下面的代码片段声明方法GetNumber,以返回对int 的引用。这样,调用者可以直接访问数组中的元素,并可以更改其内容: C# 7.0 int[] _numbers = { 3, 7, 11, 15, 21 }; public ref int GetNumber(int index) { return ref _numbers[index]; } 在C# 7.2 中,readonly 修饰符可以添加到ref 返回值上。这样,调用者不能更改返回值的内容,但仍然使用引用语义,并可以避免在返回结果时复制值类型。调用方收到引用,但不允许更改引用: C# 7.2 int[] _numbers = { 3, 7, 11, 15, 21 }; public ref readonly int GetNumber(int index) { return ref _numbers[index]; } 在C# 7.2 之前,C#可以创建引用类型(类)和值类型(结构)。然而,装箱时,结构体也可以存储在堆中。在C# 7.2 中,可以声明一个类型ref struct,该类型只允许放在堆栈上: C# 7.2 ref struct OnlyOnTheStack { } 引用的新特性在第17 章中介绍。 0.4 ASP.NET Core 中的新特性 在.NET Core 和Visual Studio 2017 中,有一个新的项目文件。在Visual Studio 2015 中是预览版本的.NET Core工具,在Visual Studio 2017 中已经发布了。该工具使用csproj 文件切换到MSBuild 环境,所以现在有了csproj文件用于.NET Framework 和.NET Core 应用程序。然而,这并不是前几代的csproj 文件。现在的csproj 文件要短得多,简化了许多,也可以使用简单的文本编辑器来修改它们。 .NET Core 2.0 通过.NET Standard 2.0 中定义的类和方法得到增强,这更便于将现有的.NET Framework 应用程序迁移到.NET Core。 创建ASP.NET Core 项目,不仅简化了csproj 文件,而且简化了C#源代码。使用默认的WebHostBuilder 时,会预定义更多的内容。添加配置和日志提供程序时,不需要自己添加它们。在ASP.NET Core MVC 中,有了一些小的改进——例如,视图组件现在可以在标记辅助程序中使用。 还有一种新的技术——Razor 页面,比ASP.NET Core MVC 更容易学习。有些应用程序不需要来自模型-视图-控制器模式的抽象,此时就可以使用Razor 页面。 0.5 UWP 的新特性 Windows 10 一年更新两次(如果在Windows Insiders 程序中,就会更频繁地得到更新,但这对大多数用户来说并不正常)。每次Windows 更新都会发布一个新的SDK。最新的两项更新是Creators Update(构建号15063, 2017年3 月)和Fall Creators Update (构建号16299, 2017 年10 月)。 微软继续提供集成在Windows 控件中的新设计特性。新的设计命名为Fluent Design,它集成到标准控件中,也可以直接访问——例如,使用acrylic 和reveal brushes。在应用程序中通过ParallaxView 添加了视差效果。 添加特性也提高了生产力。可以使用Windows Template Studio (Visual Studio 的一个扩展)中的模板编辑器创建多个页面,并使用预先生成的服务。 XAML 通过有条件的XAML 进行了增强,使其更容易支持多个Windows 10 版本,但使用旧版本Windows 10 中没有的新功能。 InkCanvas 控件提供了新的标尺,可以轻松地集成到应用程序中。NavigationView 可以很容易地创建带有汉堡包按钮和SplitView 的自适应菜单。本书的第Ⅳ部分将详细介绍所有这些新特性以及更多的内容。 0.6 编写和运行C#代码的环境 .NET Core 运行在Windows、Linux 和Mac 操作系统上。使用Visual Studio Code(https://code.visualstudio.com), 可以在任何操作系统上创建和构建程序。 最好用的开发工具是Visual Studio 2017,也是本书使用的工具。可以使用Visual Studio Community 2017版(https://www.visualstudio.com),但本书介绍的一些功能只有Visual Studio 的企业版提供。需要企业版时会提到。 Visual Studio 2017 需要Windows 10 构建号1507 或更高版本,要求使用Windows 8.1、Windows Server 2012 R2或Windows 7 SP1。要构建和运行本书中的Windows 应用程序(UWP),需要Windows 10。 要为iOS 创建和构建Xamarin 应用程序,还需要用于构建系统的Mac。没有Mac,仍然可以为Windows和Android 开发Xamarin 应用程序。 在Mac上开发应用程序,可以使用Visual Studio for Mac:https://www.visualstudio.com/vs/Visual - Studio - Mac/。 可以使用这个工具创建ASP.NET Core和Xamarin应用程序,但是不能创建和测试Windows应用程序。 0.7 本书内容 本书首先在第1 章介绍.NET 的整体体系结构,给出编写托管代码所需要的背景知识。此后概述不同的应用程序类型,学习如何用新的开发环境CLI 编译程序,介绍在Visual Studio 中开始学习的最重要部分。之后本书分几部分介绍C#语言及其在各个领域中的应用。 第I 部分—— C#语言 该部分介绍C#语言的良好背景知识。尽管这一部分假定读者是有经验的编程人员,但它没有假设读者拥有任何特定语言的知识。首先介绍 C#的基本语法和数据类型,再介绍C#的面向对象特性,之后介绍C#中的一些高级编程主题,如委托、lambda 表达式和语言集成查询(Language Integrated Query,LINQ)。 由于C#包含许多函数式编程的特性,因此需要了解元组和模式匹配的函数式编程基础,讨论异步编程和引用语义的新语言特性。本部分最后探讨Visual Studio 2017 的许多特性,还将了解Docker 的基础知识,以及Visual Studio 2017 支持Docker 的方式。 第II 部分——.NET Core 与Windows Runtime 第19~29 章介绍独立于应用程序类型的.NET Core 和Windows Runtime(运行库)。本部分在第19 章中介绍如何创建库和NuGet 包,学习如何以最好的方式使用.NET 标准。 依赖注入(Dependency Injection,DI)与.NET Core 一起使用:服务注入Entity Framework Core 和ASP.NET Core。ASP.NET Core MVC 使用了数百个服务。DI 便于跨WPF、UWP 和Xamarin 使用相同的代码。第20 章专门介绍DI 的基础,还可以在DI 容器Microsoft.Extensions .DependencyInjection 中学到高级特性,包括调整非微软容器。其他许多章节也使用DI。 第21 章介绍使用任务并行库(Task Parallel Library,TPL)进行并行编程,以及用于同步的各种对象。 第22 章学习如何访问文件系统,读取文件和目录,了解如何使用System.IO 名称空间中的流和Windows运行库中的流来编写Windows 应用程序。 第23 章学习使用套接字和使用更高级别的抽象(如HttpClient)的联网的核心基础。 第24 章利用流来了解安全性,以及如何加密数据,允许进行安全的转换。本章还讨论了创建Web 应用程序时需要了解的一些主题,如SQL 注入和跨站点请求伪造攻击的问题。 第25 和26 章展示了如何访问数据库。第25 章使用ADO.NET 直接解释事务,并涵盖了使用.NET 核心的环境事务。第26 章介绍了Entity Framework Core 2.0 提供的所有新特性。EF Core 2.0 有旧的Entity Framework 6.x无法提供的许多特性。 第27 章介绍使用本地化的技术本地化应用程序,该技术对Windows 和Web 应用程序都非常重要。 用C#代码创建功能时,不要跳过创建单元测试的步骤。一开始需要更多的时间,但随着时间的推移,添加功能和维护代码时,就会看到其优势。第28 章介绍如何创建单元测试,包括Visual Studio 2017 中的实时单元测试、网络测试和编码的UI 测试。 第29 章介绍了.NET Core 的日志功能,以及使用Visual Studio AppCenter 获取分析信息。 第III 部分——Web 应用程序和服务 本部分将介绍Web 应用程序和服务。本部分从第30 章开始,提供了ASP.NET Core 的基础。使用MVC 模式创建Web 应用程序,包括新技术Razor 页面,在第31 章中介绍。第32 章涵盖了ASP.NET Core 的REST 服务特性:Web API。 第IV 部分——应用程序 本部分介绍如何使用XAML 构建应用程序——Universal Windows 应用程序和Xamarin。了解Windows 应用程序的基础,包括第33 章中XAML 的基础,其中包含XAML 语法、依赖属性和标记扩展,可以在其中创建自己的XAML 语法。本章介绍了Windows 控件的不同类别以及与XAML 绑定数据的基础。 第34 章主要关注MVVM(模型-视图-视图模型)模式。该章将学习如何利用基于XAML 的应用程序的数据绑定特性,这些特性允许在Windows 应用程序、WPF 和Xamarin 之间共享大量代码。也可以分享许多为iOS和Android 平台开发的代码。创建WPF 应用程序并没有在本书中介绍——这一技术在最近几年并没有得到多少改进,应该考虑转向通用Windows 平台,如果使用第34 章学到的知识,就更容易实现这一点。WPF 应用程序仍然需要维护。要想更深入地了解WPF,应该阅读本书的上一版。 第35 章介绍基于XAML 的应用程序的样式化。第36 章介绍了用通用Windows 平台创建Windows 应用程序的高级功能。展示了应用程序服务、上墨(inking)、AutoSuggest 控件、高级编译绑定特性等。 第37 章帮助启动Windows、Android 和iPhone 的Xamarin 开发,并展示幕后发生的事情。学习Xamarin.Android、Xamarin.iOS 和Xamarin.Forms 之间的不同之处。了解Xamarin.Forms 控件与Windows 控件的不同之处,更快地从Windows 开发转向Xamarin。本章的较大示例使用与第34 章中的Windows 应用程序相同的MVVM 库。 附加的章节 附加的第1 章讨论了Microsoft Composition,它允许创建容器和部件之间的独立性。附加的第2 章论述如何将对象序列化到XML 和JSON 中,以及用于读取和编写XML 的不同技术。 Web 应用程序的发布和订阅技术使用ASP.NET Core 技术WebHooks 和SignalR 的形式,在附加的第3 章中讨论。附加的第4 章对使用Bot 服务和Azure 认知服务创建应用程序有了新的认识。 附加的第5 章涵盖了一些与Windows 应用程序相关的额外主题:使用相机、地理定位来访问当前的位置信息,以各种格式显示地图的MapControl,以及几个传感器(比如提供光线信息和测量重力的传感器)。 可以扫描封底二维码查看附加的5 章内容。 0.8 如何下载本书的示例代码 在读者学习本书中的示例时,可以手工输入所有的代码,也可以使用本书附带的源代码文件。本书使用的所有源代码都可以从本书合作站点http://www.wrox.com/上下载。登录到站点http://www.wrox.com/,使用Search 工具或书名列表就可以找到本书。接着单击本书细目页面上的Download Code 链接,就可以获得所有的源代码,也可以扫描封底的二维码获取本书的源代码。 注意: 许多图书的书名都很相似,所以通过ISBN 查找本书是最简单的,本书英文版的ISBN 是978-1-119-44927-0。 在下载代码后, 只需要用自己喜欢的解压缩软件对它进行解压缩即可。另外, 也可以进入http://www.wrox.com/dynamic/books/download.aspx 上的Wrox 代码下载主页,查看本书和其他Wrox 图书的所有代码。 0.9 GitHub 源代码也可以在GitHub 上提供,网址是https://www.github.com/ProfessionalCSharp/ ProfessionalCSharp7。在GitHub 中,还可以使用Web 浏览器打开每个源代码文件。使用这个网站时,可以把完整的源代码下载到一个zip 文件。还可以将源代码复制到系统上的本地目录。只需要安装git 工具,为此可以使用Visual Studio 或者从https://git-scm.com/downloads 下载Windows、Linux 和Mac 的git 工具。要将源代码复制到本地目录,请使用git clone: > git clone https://www.github.com/ProfessionalCSharp/ProfessionalCSharp7 使用此命令,把完整的源代码复制到子目录ProfessionalCSharp7。之后就可以开始处理源文件了。 Visual Studio 的更新可用,SignalR 库发布后,源代码将在GitHub 上更新。如果在复制源代码之后源代码发生了变化,就可以在将当前目录更改为源代码目录后,提取最新的更改: > git pul l 如果对源代码做了一些更改,git pull 可能会导致错误。如果发生这种情况,可以把更改隐藏起来,然后再取出来: > git stash > git pull git 命令的完整列表可以在https://git-scm.com/docs 上找到。 如果源代码有问题,可以在存储库中报告问题。在浏览器中打开https://github.com/ProfessionalCSharp/ProfessionalCSharp7,单击Issues 选项卡,单击New Issue 按钮。这将打开一个编辑器,如图1 所示,尽可能详细地描述问题。 图1 为了报告问题,需要一个GitHub 账户。如果有一个GitHub 账户,也可以将源代码存储库分叉到账户上。 有关使用GitHub 的更多信息,请查看https://guides .github.com/activities/hello-world。 注意: 可以读取源代码和相关问题,并在不加入GitHub 的情况下在本地复制存储库。要在GitHub 上发布问题并创建自己的存储库,需要自己的GitHub 账户。 0.10 勘误表 尽管我们已经尽力保证不出现错误,但错误总是难免的,如果你在本书中找到了错误,如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。 要在网站上找到本书的勘误表,可以登录http://www.wrox.com,通过Search 工具或书名列表查找本书,然后在本书的细目页面上,单击Book Errata 链接。在这个页面上可以查看Wrox 编辑已提交和粘贴的所有勘误项。 完整的图书列表还包括每本书的勘误表,网址是www.wrox.com/misc-pages/ booklist.shtml。 如果没有在Book Errata 页面上发现自己找到的错误,请访问www.wrox.com/contact/techsupport.shtml,填好表单,将你找到的错误发送给我们。我们将检查信息,如果合适的话,将消息发送到该书的勘误页面,并在该书的后续版本中修复问题。

more >
扫描二维码
下载APP了解更多

同系列产品more >

C# 11和.NET 7入门与跨平台开发(第...

[美] 马克·J. 普莱斯(Ma
定 价:158元

查看详情
Azure、DevOps和微服务软件架构实...

[葡] 加布里埃尔·巴普蒂
定 价:128元

查看详情
C#高级编程(第12版)

[奥]克里斯琴·内格尔(C
定 价:198元

查看详情
C# 10 和 .NET 6入门与跨平台开发...

[美] 马克·J.普莱斯(Mar
定 价:168元

查看详情
C#入门经典(第9版)

[德] 本杰明·帕金斯(Ben
定 价:118元

查看详情
图书分类全部图书
more >
  • Christian Nagel 是Visual Studio 和开发技术方向的Microsoft MVP,担任微软开
    发技术代言人(Microsoft Regional Director)已经超过15 年。Christian 是CN innovation
    公司的创始人,CN innovation 公司提供指导、培训、代码评审,并协助使用微软技术
    设计和开发解决方案。他拥有超过25 年的软件开发经验。
    Christian Nagel 最初在Digital Equipment 公司通过PDP 11 和VAX / VMS 系统开
    始他的计算机职业生涯,接触过各种语言和平台。在2000 年,.NET 只有一个技术
    概览版时,他就开始使用各种技术建立.NET 解决方案。目前,他主要指导人们开发和
    设计Windows 应用程序、ASP.NET Core Web 应用程序和Xamarin,并帮助他们使用
    Microsoft Azure 服务产品。
    在软件开发领域工作多年以后,Christian 仍然热爱学习和使用新技术,并通过多种形式教别人如何使用新
    技术。他的Microsoft 技术知识非常渊博,编写了很多书,拥有微软认证培训师(MCT)和微软认证解决方案开发
    专家(MCSD)认证。Christian 经常在国际会议(如Microsoft Ignite、BASTA!和TechDays)上发言。他创立了INETA
    Europe 来支持.NET 用户组。他的联系网站是www.cninnovation.com,博客是https://csharp.christiannagel.com,
    其Twitter 账号是@christiannagel。
  • C# 7内幕指南,包括高级新特性
    目前Visual Studio 2017提供了C# 7。发布为NuGet包的每个.NET Core部分都进行了更新。阅读这本专家级指南是经验丰富的程序员提高效率的更快捷方式。C# 7以更快的速度完成更多工作,没有人比Christian Nagel更适合传播在现实世界中极有价值的全新信息。本书论述清晰,内容完整详尽,为开发人员展示了如何将.NET引入非微软平台,如何操作这些平台上的工具,例如Docker、Gulp和NPM。

版本展示

精彩书评more >

标题

评论

版权所有(C)2023 清华大学出版社有限公司 京ICP备10035462号 京公网安备11010802042911号

联系我们 | 网站地图 | 法律声明 | 友情链接 | 盗版举报 | 人才招聘