新書推薦:
《
地下(村上春树沙林毒气事件的长篇纪实)
》
售價:HK$
76.7
《
偿还:债务与财富的阴暗面
》
售價:HK$
80.2
《
清华大学藏战国竹简校释(壹):《命训》诸篇
》
售價:HK$
94.4
《
封建社会农民战争问题导论(光启文库)
》
售價:HK$
68.4
《
虚弱的反攻:开禧北伐
》
售價:HK$
92.0
《
泰山:一种中国信仰专论(法国汉学经典译丛)
》
售價:HK$
81.4
《
花外集斠箋
》
售價:HK$
151.0
《
有兽焉.8
》
售價:HK$
70.6
|
編輯推薦: |
本书第8版吸取本书以往各版本之精华,深入探讨了C# 12.0的主要功能,比如类型别名、内联数组、默认Lambda表达式参数以及对许多主要语言构造类型的扩展支持。
书中全面透彻地讲解C#语言,旨在帮助广大读者快速掌握有价值的新特性,进一步成长为优秀的C#高级程序员。书中采用简洁的例子来阐释核心概念,同时还重点强调了针对不同水平的读者提供了大量现代设计规范,力求帮助读者减少错误,写出更高质量的代码。
通过本书的阅读,读者将获得以下提升:
?运用结构化编程,快速编写可实际工作的代码
?了解可空引用类型的复杂性及其解决方案
?全面掌握C#对象的构造,包括类、继承和接口
?巧用泛型、委托和Lambda表达式减少代码冗余
?通过LINQ来实现对集合的充分运用
?通过基于任务的异步模式和异步流来改进多线程处理
?通过并行数据处理和多线程任务来提升性能
?充分利用反射、属性和宣告式编程范式
?用增强的模式匹配语法来实现复杂类型的编程
?巧用关键字record struct和record class编写类型定义
?探索和比较C#8.0到C#12.0各个版本的新特性
|
內容簡介: |
《C# 12.0本质论(第8版)》是C#领域中广受好评的经典著作。作为C#权威指南,本书深入解析了C# 12.0的类型别名、内联数组、默认Lambda表达式参数以及对许多主要语言构造的扩展支持。全书共24章,每章开头用“思维导图”指明要讨论的主题以及每个主题与整体的关系。在介绍相关知识点的同时结合了大量通俗易懂的实例,旨在帮助读者全面掌握C#语言,快速成为C#高级程序员。
《C# 12.0本质论(第8版)》适用于对C#感兴趣的各种层次的读者,无论是初学者还是资源开发人员,都可以从本书中获益。
|
關於作者: |
著译者简介
马克·米凯利斯(Mark Michaelis)
创新软件工程和咨询公司IntelliTect创始人、首席软件架构师和培训师。作为享誉全球的C#专家,他28次入选微软最有价值专家((MVP),并且从2007年开始,一直担任微软区域主管。他是斯波坎.NET用户组创始人、年度TEDx活动的联合组织者以及东华盛顿大学的兼职教授。
周靖
微软MVP(最有价值专家),技术型资深译者,涉猎广泛,具有深厚的技术功底和良好的文学素养。早期痴迷于硬件,曾多年担任《微型计算机》杂志特约作者。继而潜心钻研程序设计并在这方面积累了丰富的经验。翻译风格严谨、准确、朴实、流畅,深受读者好评。代表译著有《学习C 20中文版》、《学习Python》、《Windows核心编程》系列版本、《深入CLR》系列版本、《Visual C#从入门到精通》系列版本以及《机器学习与人工智能实战》等。
|
內容試閱:
|
在软件工程的发展进程中,计算机编程范式经历了几次重大的思维模式的转变。每个思维模式都以前一个为基础,宗旨都是增强代码的组织和降低复杂性。本书旨在带领大家体验相同的思维模式转变过程。
本书前面几章介绍顺序编程结构。在这样的编程结构中,语句按执行顺序来写。该结构的问题在于,随着需求的增加,复杂性也呈指数级增加。因此,为了降低复杂性,代码块被移到方法中,形成结构化编程模型。在这样的模型中,可以从一个程序中的多个位置调用同一个代码块,不需要进行复制。但即使有这种结构,程序还是很快就会变得臃肿不堪,因而需要进一步抽象。在此基础上,又提出面向对象编程的概念,这将在第6章开始讨论。在此之后,大家将继续学习其他编程方法,比如基于接口的编程和LINQ(以及它促使集合API发生的改变),并最终学习通过特性(attribute)进行初级的声明性编程(第18章)。
本书有以下三个主要职能:
全面讲述C#语言,其内容远远超过那些简单的普通教程,旨在为大家进行高效软件开发打下坚实基础;
对于已经熟悉C#语言的读者,本书探讨一些较为复杂的编程思想,并深入讨论语言最新版本(C# 12.0和.NET 8)的新功能;
它是大家“如影随形的良师益友”,即便是已经精通这门语言的读者。
掌握C#语言的关键在于,尽快着手进行编程。不要等自己成为一名理论专家之后才开始动手写代码。所以,不要犹豫,马上动手。作为迭代开发思想的拥趸,我写这本书的愿望是,即使刚开始学习编程的新手,也能在第2章结束时动手写基本的C#代码。
许多主题没有在本书中讨论。本书不讨论ASP.NET、Entity Framework、Mauri、智能客户端开发以及分布式编程等主题。虽然这些主题与.NET有关,但它们都值得专门用一本书来讲解。幸好,本书的重点是C#语言及其基类库中的类型。本书将帮助大家完全掌握C#语言基础,让大家游刃有余地深入高级编程领域。
本书面向的读者
写作本书的时候,我面临的挑战是如何让高级开发人员持续保持专注但同时又不至于因为大量使用assembly、link、chain、thread和fusion等术语而使初学者产生挫败感(否则许多人会以为这本书是在讲冶金术而不是程序设计)。本书的主要读者是已经有一定编程经验并想多学一种语言来“傍身”的开发人员。为此,我精心设计了全书的内容,使其足以满足大多数开发人员的需求,让他们有获得感。
初学者:如果是编程新手,本书将帮助你从入门级程序员过渡成为C#专业开发人员,让大家未来不至于害怕面对任何C#编程任务。本书不但要教语法,还会教大家养成良好的编程习惯,帮助你为将来的编程生涯奠定良好的基础。
熟悉结构化编程的程序员:学习外语,最好的方法是“沉浸法”。与此类似,学习计算机语言的话,最好的方法是边动手边学习,而不是一直“纸上谈兵”。基于这个前提,本书最开始介绍的内容对熟悉结构化编程的开发人员而言,是很容易上手的。到快要学完第5章时,就可以开始写基本的控制流程序了。然而,要成为真正的C#开发人员,记住语法只是第一步。为了从简单程序过渡到企业级开发,C#开发人员还必须完全掌握从对象及其关系并从这个角度来思考问题。为此,第6章开始介绍类和面向对象开发。C语言、COBOL语言和FORTRAN等结构化编程语言虽然仍然在发挥作用,但作用会越来越小,所以软件工程师应该逐渐了解面向对象开发。C#语言是实现这一思维模式转变的理想语言,因为它本来就是基于“面向对象开发”这一中心思想来设计的。
熟悉“基于对象”和“面向对象”理念的开发人员:C 、Java、Python、TypeScript、Visual Basic和Java程序员都可归于此类。对于分号和大括号,他们可一点儿都不陌生!简单浏览一下第1章的代码,就会发现,就其核心而言,C#语言是类似于大家早就熟悉的C和C 风格的语言。
C#专家:对于精通C#的人,本书有很多不太常见的语法供大家参考。此
外,针对其他地方较少强调的一些语言细节以及微妙之处,我提出了自己的见解。最重要的是,本书提供了编写可靠和易维护代码的指导原则及模式。
本书也适合用作C#教材。从C# 3.0到C# 12.0,最重要的一些增强如下:
字符串插值(第2章);
隐式类型的变量(第3章);
元组(第3章);
可空引用类型(第3章);
模式匹配(第4章);
扩展方法(第6章);
分部方法(第6章);
默认接口成员(第8章);
匿名类型(第12章);
泛型(第12章);
Lambda语句和表达式(第13章);
表达式树(第13章);
标准查找操作符(第15章);
查询表达式(第16章);
动态编程(第18章);
用任务编程库(TPL)和async进行多线程编程(第20章);
用PLINQ进行并行查询处理(第21章);
并发集合(第22章)。
考虑到许多人还不熟悉这些主题,所以本书将对它们展开详细的讨论。涉及C#高级开发主题的还有指针,具体参见第23章。即使是有经验的C#开发人员,也未必能够透彻地理解这一主题。
本书特色
本书作为权威的编程语言参考指南,遵循的是核心C#语言规范。为了帮助读者理解C#语言的构造,书中用大量的例子来演示每个特性,并为每个概念提供相应的指导原则和最佳实践,以确保代码能够顺利编译、避免留下隐患并获得最佳的可维护性。
为了增强代码的可读性,书中所有代码都采用了特殊的格式,每章开篇还采用了思维导图的方式来高度概括当前这一章的内容。
网站
本书有配套的交互式网站,提供在线阅读内容(英文版)并支持全文搜索。该网站后续还要上线更多的功能,比如对许多代码清单进行交互式代码编辑和客户端编译的功能,使你能够专注于语言本身,不会因为安装或dotnet设置问题而分心。
源代码下载
除了网站,所有英文版和中文版源代码都可以从GitHub获取,网址如下:
访问有困难,也可以直接从译者主页获取。
通过以上方式,你可以下载或在本地复制,随时查看代码或者进行修改,并实际体验效果。老话说得好,纸上得来终觉浅,绝知此事要躬行。动手实际操练,始终都是学习编程语言细节的有效方式。
C#设计规范
本书新版本最重大的改进是增加了大量设计规范,下面的例子来自第18章。
设计规范
DO name custom attribute classes with the suffix Attribute.
要在为自定义特性类命名时添加Attribute后缀。
熟悉语法的程序员和能够巧妙写出高效代码的专家,两者的分水岭就是这样的设计规范。专家不仅能让代码通过编译,同时还遵循最佳实践,降低出现bug的概率,并使代码的维护变得更容易。设计规范强调了软件开发期间必须注意一些关键原则。
示例代码
虽然本书大多数代码都能在公共语言基础结构(Common Language Infrastructure,CLI)的任何实现上运行,但重点仍然是.NET实现。本书也较少使用特定于某些平台或厂商的库,除非需要解释仅与那些平台相关的重要概念(例如,解释如何正确处理Windows单线程UI)。
我们以代码清单1.21为例:
代码清单1.21 为代码添加注释
public class CommentSamples
{
public static void Main()
{
string firstName; // 用于存储名字的变量
string lastName; // 用于存储姓氏的变量
Console.WriteLine(”嘿,你!”);
Console.Write /* 不换行 */ (”请输入你的名字: ”);
firstName = Console.ReadLine();
Console.Write /* 不换行 */ (”请输入你的姓氏: ”);
lastName = Console.ReadLine();
/* 使用字符串插值在控制台上显示问候语*/
Console.WriteLine($”你的全名是{ firstName } { lastName }。”);
// 这是程序清单
// 的结尾
}
}
具体的格式解释如下:
配套资源中所有源代码都进行了彩色标注(正文黑白印刷的纸质版图书会呈现不同的灰度);
省略号表示无关代码已省略:
// ...
某些代码行添加的底纹,表明是对上个代码清单的修改,或者强调当前正在讲解的某个主题,如下面的代码清单2.23所示:
代码清单2.23 错误;string是不可变的
Console.Write(”输入文本: ”);
string text = Console.ReadLine();
// UNEXPECTED: text并没有转换为全大写
text.ToUpper();
Console.WriteLine(text);
某些代码清单后列出了相应的控制台输出。由用户输入的内容加粗显示,如以下输出1.7所示:
输出1.7
嘿,你!
请输入你的名字: Inigo
请输入你的姓氏: Montoya
你的全名是Inigo Montoya。
虽然我也可以在书中提供完整的代码以便读者复制,但这样会让大家分心。因此,请自行在程序中修改示例代码。
还可以从译者主页获取中文版示例代码和更多配套资源。
思维导图
每章开篇的思维导图旨在方便读者快速了解当前章节的内容。下面是一个例子(摘自第6章)。
在思维导图的中心,显示的是当前章的主题,所有高级主题都围绕该中心展开。利用思维导图,可方便地搭建自己的知识体系,可以从一个主题出发,更清楚地理解其周边的各个具体概念,避免中途纠缠于一些旁枝末节的小问题。
编程水平分级阅读说明
根据个人编程水平的不同,可以借助于书中提供的以下标志来轻松找到适合自己的内容:
初学者主题,特别为刚入门的程序员提供的定义或解释;
高级主题,使有经验的开发人员将注意力放在他们最关心的内容上;
注意,强调读者应注意的要点;
语言对比,分散于正文中的“语言对比”描述C#和其他语言的关键差异,为具有其他语言背景的读者提供C#参考。
本书内容的组织
总的来说,软件工程的宗旨是管理复杂性。本书基于该宗旨来组织内容。第1章~第5章介绍结构化编程,学完这些内容后,可以立即动手写一些功能简单的代码。第6章~第10章介绍C#的面向对象构造,新手应在完全理解这几章的内容后,再开始接触本书其余部分更高级的主题。第12章~第14章介绍更多用于降低复杂性的构造,讲解了当今几乎所有程序都要用到的通用设计模式。理解它们之后,才能更轻松地理解如何通过反射和特性来进行动态编程。后续章节将广泛运用它们来实现线程处理和互操作性。
本书最后专门用一章(第24章)讲解CLI。这一章在开发平台的背景下讲述C#语言。之所以放到最后,是因为它并非C#特有,而且不涉及语法和编程风格问题。不过,本章适合在任何时候阅读,或许最恰当的时机是在完成第1章的阅读之后。
每章的内容简介如下。
第1章——C#概述:本章在展示了用C#语言写的Hello World程序之后对其进行细致分析。目的是让读者熟悉C#程序的“外观和感觉”,并理解如何编译和调试自己的程序。另外,还简单描述了C#程序的执行上下文及其中间语言(Intermediate Language,IL)。
第2章——数据类型:任何有用的程序都要处理数据,本章介绍C#语言的基元数据类型。
第3章——深入数据类型:本章深入讲解数据类型的两大类别:值类型和引用类型。然后讲解隐式类型的局部变量、元组、可空修饰符以及C# 8.0引入的可空引用类型。最后深入讨论基元数组结构。
第4章——操作符和控制流:计算机最擅长重复性操作,为了利用该能力,需要知道如何在程序中添加循环和条件逻辑。本章还讨论C#操作符、数据转换和预处理器指令。
第5章——方法和参数:本章详细讨论方法及其参数,其中包括传值、传引用和通过out参数返回数据。从C# 4.0开始支持默认参数,本章解释了具体如何使用。
第6章——类:前面几章介绍类的基本构成元素,本章将把这些构造合并为具有完整功能的类型。类是面向对象技术的核心,它定义了对象模板。
第7章——继承:继承是许多开发人员的基本编程手段,C#语言更是提供了一些独特构造,比如new修饰符。本章讨论继承语法的细节,其中包括重写(overriding)。
第8章——接口:本章讨论如何利用接口来定义类之间的“可进行版本控制的交互契约”(versionable interaction contract)。C#语言同时包含显式和隐式接口成员实现,可以实现一个额外的封装等级,这是其他大多数语言所不支持的。本章最后用一节讨论接口版本控制问题,并强调C# 8.0的引入的“默认接口成员”的作用。
第9章——结构和记录:C# 9.0为结构引入了记录(record)的概念,并在C# 10中把它扩展到值类型(即record struct)。尽管定义引用类型的情况更普遍,但有时确实需要定义行为与C#语言内置的基元类型相似的值类型。本章介绍如何创建自定义结构(struct),并强调它的一些要特别注意的地方。
第10章——良好形式的类型:本章讨论更高级的类型定义,解释如何实现操作符,比如 和转型操作符,并描述如何将多个类封装到一个库中。另外,还演示了如何定义命名空间和XML注释,并讨论如何基于垃圾回收机制来设计令人满意的类。
第11章——异常处理:本章延伸讨论第5章引入的异常处理机制,描述如何利用异常层次结构创建自定义异常。另外,还强调异常处理的一些最佳实践。
第12章——泛型:泛型或许是C# 1.0最缺少的功能。本章全面讨论自C# 2.0引入的泛型机制。此外,C# 4.0增加了对协变和逆变的支持,本章要在泛型背景中探讨它们。
第13章——委托和Lambda表达式:正是因为委托,才使C#与其前身语言(C和C 等)有了显著不同,它定义了在代码中处理事件的模式。这几乎完全消除了写轮询例程的必要。Lambda表达式是使C# 3.0的LINQ成为可能的关键概念。通过本章的学习,将知道Lambda表达式是在委托的基础上构建起来的,它提供了比委托更优雅和简洁的语法。本章内容是第14章的基础。
第14章——事件:封装起来的委托(称为事件)是公共语言运行时(Common Language Runtime,CLR)的核心构造。本章还要讲解自C# 2.0引入的另一个特性,即匿名方法。
第15章——支持标准查询操作符的集合接口:通过讨论新的Enumerable类的扩展方法,介绍C# 3.0引入的一些简单而强大的改变。Enumerable类造就了全新的集合API,即“标准查询操作符”,本章对其进行了详细讨论。
第16章——使用查询表达式的LINQ:如果只使用标准查询操作符,会形成让人难以辨认的长语句。但查询表达式提供了一种类似SQL风格的语法,有效地解决了该问题。本章会详细讨论这种表达式。
第17章——构建自定义集合:构建用于操纵业务对象的自定义API时,经常都需要创建自定义集合。本章讨论具体如何做。还要介绍能使自定义集合的构建变得更简单的上下文关键字。
第18章——反射、特性和动态编程:20世纪80年代末,程序结构的思维模式发生了根本性的变化,面向对象的编程是这个变化的基础。类似地,特性(attribute)使声明性编程和嵌入元数据成为可能,因而引入了一种新的思维模式。本章探讨特性的方方面面,并讨论如何通过反射机制来获取它们。本章还讨论如何通过基类库(Base Class Library,BCL)中的序列化框架来进行文件的输入输出。C# 4.0新增了dynamic关键字,能将所有类型检查都移至运行时进行,因而极大扩展了C#语言的能力。
第19章——多线程处理:大多数现代程序都要求用线程执行长时间运行的任
务,同时确保对并发事件的快速响应。随着程序变得越来越复杂,必须采取其他措施来保护这些高级环境中的数据。多线程应用程序的编写比较复杂。本章讨论如何操纵线程(包括如何取消)以及如何在任务上下文中进行异常处理。
第20章——基于任务的异步模式编程:本章深入探讨基于任务的异步模式以及相应的async/await语法。它极大地简化了多线程编程。另外,本章还要讲解C# 8.0引入的异步流的概念。
第21章——并行迭代:为了优先性能,一个简单的方式是使用Parallel对象或并行LINQ(PLINQ)库在数据上进行并行迭代。
第22章——线程同步:本章对前几章的内容进行扩展,演示如何利用一些内建线程处理模式来简化对多线程代码的显式控制。
第23章——平台互操作性和不安全的代码:必须意识到,C#语言仍然是相对年轻的一种语言,现有的许多代码都是用其他语言写成的。为了用好这些现有代码,C#语言通过P/Invoke提供了对互操作性(调用非托管代码)的支持。此外,C#语言允许使用指针,也允许执行直接内存操作。虽然使用了指针的代码要求特殊权限才能运行,但它具有与C风格的API完全兼容的能力。
第24章——公共语言基础结构(CLI):事实上,C#被设计成一种在CLI的顶部工作的最有效的编程语言。本章讨论C#程序与底层“运行时”及其规范的关系。
希望本书成为你深度掌握C#编程技能的理想参考用书。另外,在能熟练使用C#语言后,本书仍然可以作为案头参考,供你遇到不熟悉的领域时参考。
——马克?米凯利斯( Mark Michaelis)
|
|