C# 7.0本质论(英文版)pdf下载

C# 7.0本质论(英文版)百度网盘pdf下载

作者:
简介:C# 7.0本质论(英文版)
出版社:
出版时间:2019-09
pdf下载价格:9.00¥


预览


内容介绍

内容简介

作为历年来深受各层次开发人员欢迎的C#指南,本书讨论了从C# 3.0到7.0的*重要的C#特性,强调了现代编程模式,可帮助读者编写简洁、强大、健壮、安全和易于维护的C#代码。C#专家Mark Michaelis对语言进行了全面而深入的探讨,提供了对关键C# 7.0增强、C# 7.0和.NET Core/.NET Standard的配合使用以及跨平台编译的专业论述。

作者简介

作者简介


Mark Michaelis是高端软件工程和咨询公司IntelliTect的创办者、首席技术架构师和培训师。Mark经常在开发者大会上发言,写过许多文章和书籍,目前是《MSDN Magazine》的《Essential .NET》专栏作家。

从1996年起,他一直是C#、Visual Studio Team System和Windows SDK的MVP。2007年被评选为微软的Regional Director。他还服务于微软的几个软件设计评审团队,包括C#和VSTS。

Mark拥有伊利诺伊大学哲学专业文学学士学位和伊利诺伊理工大学计算机硕士学位。

他不是痴迷于计算机,就是忙于陪伴家人或者玩壁球(2016年暂停铁人三项训练)。他居住在华盛顿州的斯波坎,他和妻子Elisabeth有三个孩子:Benjamin、Hanna和Abigail。

技术编辑简介

Eric Lippert目前在Facebook负责开发者工具。之前是微软C#语言设计团队的一员。不在StackOverflow上回答用户的C#问题或者编辑程序书时,他总是喜欢玩他的小帆船。目前和妻子Leah居住在华盛顿州的西雅图。


目录

第1章 C#概述1


1.1 Hello, World2


1.2 C#语法基础11


1.3 使用变量20


1.4 控制台输入和输出24


1.5 注释28


1.6 托管执行和CLI32


1.7 多个.NET框架37


第2章 数据类型43


2.1 基本数值类型44


2.2 更多基本类型53


2.3 null和void67


2.4 数据类型转换69


第3章 更多数据类型77


3.1 类型的划分77


3.2 可空修饰符80


3.3 元组83


3.4 数组90


第4章 操作符和控制流程109


4.1 操作符110


4.2 控制流程概述126


4.3 代码块132


4.4 代码块、作用域和声明空间135


4.5 布尔表达式137


4.6 按位操作符147


4.7 控制流程语句(续)153


4.8 跳转语句165


4.9 C#预处理器指令171


第5章 方法和参数181


5.1 调用方法182


5.2 声明方法189


5.3 using指令195


5.4 Main()的返回值和参数200


5.5 高级方法参数203


5.6 递归215


5.7 方法重载217


5.8 可选参数220


5.9 用异常实现基本错误处理225


第6章 类241


6.1 类的声明和实例化245


6.2 实例字段249


6.3 实例方法251


6.4 使用this关键字252


6.5 访问修饰符259


6.6 属性261


6.7 构造函数278


6.8 静态成员289


6.9 扩展方法299


6.10 封装数据301


6.11 嵌套类304


6.12 分部类307


第7章 继承313


7.1 派生314


7.2 重写基类326


7.3 抽象类338


7.4 所有类都从System.Object派生344


7.5 使用is操作符验证基础类型345


7.6 使用is操作符进行模式匹配346


7.7 switch语句中的模式匹配347


7.8 使用as操作符进行转换349


第8章 接口353


8.1 接口概述354


8.2 通过接口实现多态性355


8.3 接口实现360


8.4 在实现类和接口之间转换366


8.5 接口继承366


8.6 多接口继承369


8.7 接口上的扩展方法369


8.8 通过接口实现多继承371


8.9 版本控制374


8.10 比较接口和类375


8.11 比较接口和特性377


第9章 值类型379


9.1 结构383


9.2 装箱390


9.3 枚举398


第10章 合式类型411


10.1 重写object的成员411


10.2 操作符重载424


10.3 引用其他程序集432


10.4 定义命名空间442


10.5 XML注释445


10.6 垃圾回收449


10.7 资源清理452


10.8 推迟初始化461


第11章 异常处理465


11.1 多异常类型465


11.2 捕捉异常469


11.3 常规catch块473


11.4 异常处理规范475


11.5 自定义异常479


11.6 重新抛出包装的异常483


第12章 泛型487


12.1 如果C#没有泛型488


12.2 泛型类型概述493


12.3 约束506


12.4 泛型方法519


12.5 协变性和逆变性524


12.6 泛型的内部机制531


第13章 委托和Lambda表达式537


13.1 委托概述538


13.2 声明委托类型542


13.3 Lambda表达式550


13.4 匿名方法556


第14章 事件575


14.1 使用多播委托编码Publish-Subscribe模式576


14.2 理解事件591


第15章 支持标准查询操作符的集合接口603


15.1 集合初始化器604


15.2 IEnumerable使类成为集合607


15.3 标准查询操作符613


15.4 匿名类型之于LINQ646


第16章 使用查询表达式的LINQ657


16.1 查询表达式概述658


16.2 查询表达式只是方法调用676


第17章 构建自定义集合679


17.1 更多集合接口680


17.2 主要集合类683


17.3 提供索引器702


17.4 返回null或者空集合705


17.5 迭代器705


第18章 反射、特性和动态编程721


18.1 反射722


18.2 特性735


18.3 使用动态对象进行编程759


第19章 多线程处理771


19.1 多线程处理基础774


19.2 使用System.Threading781


19.3 异步任务789


19.4 取消任务810


19.5 基于任务的异步模式816


19.6 并行迭代846


19.7 并行执行LINQ查询856


第20章 线程同步863


20.1 线程同步的意义864


20.2 计时器893


第21章 平台互操作性和不安全代码897


21.1 平台调用898


21.2 指针和地址910


21.3 通过委托执行不安全代码920


第22章 公共语言基础结构(CLI)923


22.1 CLI的定义924


22.2 CLI的实现925


22.3 .NET标准928


22.4 BCL929


22.5 C#编译成机器码929


22.6 运行时932


22.7 程序集、清单和模块936


22.8 公共中间语言939


22.9 公共类型系统939


22.10 公共语言规范940


22.11 元数据941


22.12 NET Native和AOT编译942






Contents


1 Introducing C# 1


Hello, World 2


C# Syntax Fundamentals 11


Working with Variables 20


Console Input and Output 24


Commne ts 28


Managed Execution and the Common Language Infrastructure 32


Multiple .NET Frameworks 37


2 Data Types 43Fundamental Numeric Types 44


More Fundamental Types 53


null and void 67


Conversions between Data Types 69


3 More with Data Types 77


Categories of Types 77


Nullable Modifier 80


Tuples 83


Arrays 90


4 Operators and Control Flow 109


Operators 110


Introducing Flow Control 126


Code Blocks ({}) 132


Code Blocks, Scopes, and Declaration Spaces 135


Boolean Expressions 137


Bitwise Operators (<<, >>, |, &, ^, ~) 147



前言/序言

在软件工程的发展历史中,用于编写计算机程序的方法经历了几次思维模式的重大转变。每种思维模式都以前一种为基础,宗旨都是增强代码的组织,并降低复杂性。本书将带领你体验相同的思维模式转变过程。


本书开始几章会指导你学习顺序编程结构。在这种编程结构中,语句按编写顺序执行。该结构的问题在于,随着需求的增加,复杂性也指数级增加。为降低复杂性,将代码块转变成方法,产生了结构化编程模型。在这种模型中,可以从一个程序中的多个位置调用同一个代码块,不需要复制。但即使有这种结构,程序还是会很快变得臃肿不堪,需进一步抽象。所以,在此基础上人们又提出了面向对象编程的概念,这将在第6章开始讨论。在此之后,你将继续学习其他编程方法,比如基于接口的编程和LINQ(以及它促使集合API发生的改变),并最终学习通过特性(attribute)进行初级的声明性编程(第18章)。


本书有以下三个主要职能。


全面讲述C#语言,其内容已远远超过了一本简单的教程,为你进行高效率软件开发打下坚实基础。


对于已熟悉C#的读者,本书探讨了一些较为复杂的编程思想,并深入讨论了语言最新版本(C# 7.0和.NET Framework 4.7/.NET Core 2.0)的新功能。


它是你永远的案头参考—即便在你精通了这种语言之后。


成功学习C#的关键在于,要尽可能快地开始编程。不要等自己成为一名理论“专家”之后才开始写代码。所以不要犹豫,马上开始写程序吧。作为迭代开发思想的追随者,我希望即使一名刚开始学习编程的新手,在第2章结束时也能动手写基本的C#代码。


许多主题本书没有讨论。你在本书中找不到ASP.NET、ADO.NET、Xamarin、智能客户端开发以及分布式编程等主题。虽然这些主题与.NET有关,但它们都值得用专门的书分专题讲述。幸好市面上已经有丰富的图书供读者选择。本书重点在于C#及基类库中的类型。读完本书之后,你在上述任何领域继续深入学习都会有游刃有余的感觉。


本书面向的读者


写作本书时,我面临的一个挑战是如何在持续吸引高级开发人员眼球的同时,不因使用assembly、link、chain、thread和fusion等字眼而打击初学者的信心,否则许多人会以为这是一本讲冶金而不是程序设计的书。 本书的主要读者是已经有一定编程经验,并想多学一种语言来“傍身”的开发者。但我还是小心地编排了本书的内容,使之对各种层次的开发者都有足够大的价值。


初学者:假如你是编程新手,本书将帮助你从入门级程序员过渡为C#开发者,消除以后在面临任何C#编程任务时的害怕心理。本书不仅要教会你语法,还要教你养成良好的编程习惯,为将来的编程生涯打下良好基础。


熟悉结构化编程的程序员:学习外语最好的方法就是“沉浸法”。类似地,学习一门计算机语言最好的方法就是在动手中学习,而不是等熟知了它的所有“理论”之后再动手。基于这个前提,本书最开始的内容是那些熟悉结构化编程的开发者很容易上手的。到第5章结束时,这些开发者应该可以开始写基本的控制流程序。然而,要成为真正的C#开发者,记住语法只是第一步。为了从简单程序过渡到企业级开发,C#开发者必须熟练从对象及其关系的角度来思考问题。为此,第6章的“初学者主题”开始介绍类和面向对象开发。历史上的C、COBOL和FORTRAN等结构化编程语言虽然仍在发挥作用,但作用会越来越小,所以,软件工程师们应该逐渐开始了解面向对象开发。C#是进行这一思维模式转变的理想语言,因为它本来就是基于“面向对象开发”这一中心思想来设计的。


熟悉“基于对象”和“面向对象”理念的开发者:C++、Python、TypeScript、Visual Basic和Java程序员都可归于此类。对于分号和大括号,他们可是一点儿都不陌生!简单浏览一下第1章的代码,你会发现,从核心上讲,C#类似于你熟知的C和C++风格的语言。


C#专家:对于已经精通C#的读者,本书可供你参考不太常见的语法。此外,对于在其他地方强调较少的一些语言细节以及微妙之处,我提出了自己的见解。最重要的是,本书提供了编写可靠和易维护代码的指导原则及模式。在你教别人学C#时,本书也颇有助益。从C# 3.0到C# 7.0最重要的一些增强包括:


字符串插值(第2章)


隐式类型的变量(第3章)


元组(第3章)


模式匹配(第4章)


扩展方法(第6章)


分部方法(第6章)


泛型(第12章)


Lambda语句和表达式(第13章)


表达式树(第13章)


匿名类型(第15章)


标准查询操作符(第15章)


查询表达式(第16章)


动态编程(第18章)


用任务编程库(TPL)和async进行多线程编程(第19章)


用PLINQ进行并行查询处理(第19章)


并发集合(第20章)


考虑到许多人还不熟悉这些主题,本书围绕它们展开了详细的讨论。涉及高级C#开发的还有“指针”这一主题,该主题将在第21章讨论。即使是有经验的C#开发者,也未必能很透彻地理解这一主题。