新書推薦:
《
不被大风吹倒
》
售價:HK$
65.9
《
人生解忧:佛学入门四十讲
》
售價:HK$
107.8
《
东野圭吾:分身(东野圭吾无法再现的双女主之作 奇绝瑰丽、残忍又温情)
》
售價:HK$
64.9
《
浪潮将至
》
售價:HK$
86.9
《
在虚无时代:与马克斯·韦伯共同思考
》
售價:HK$
57.2
《
斯大林格勒:为了正义的事业(格罗斯曼“战争二部曲”的第一部,《生活与命运》前传)
》
售價:HK$
184.8
《
日内交易与波段交易的资金风险管理
》
售價:HK$
85.8
《
自然信息图:一目了然的万物奇观
》
售價:HK$
140.8
|
編輯推薦: |
这本畅销书将回答你在C# 10或.NET 6中遇到的各种问题。C#是一门拥有惊人的灵活性和生命力的语言,它的持续发展也促使我们不断学习新内容。本书进行了全面更新,是广受好评的C#一站式参考书。本书围绕概念和用例进行组织,不但为中高级程序员提供了C#和.NET的简明知识体系,还进行了一系列深度探索。
|
內容簡介: |
本书是一本C# 10的技术指南,在上一版的基础上进行了全面更新,围绕概念和用例进行组织,系统、全面、细致地讲解了C# 10从基础知识到各种高级特性的命令、语法和用法。本书首先介绍C#和.NET,第2-4章详细介绍C#语言的语法、类型和变量。其余各章则涵盖.NET 6基础类库的功能,包括LINQ、XML、集合、并发、I/O 和联网、内存管理、反射、动态编程、属性、加密和原生互操作性等主题。第5章和第6章是后续主题的基础,除这两章之外,其余各章可以根据需要按任意顺序阅读。本书的讲解深入浅出,同时为每一个知识点都专门设计了贴切、简单、易懂的学习案例,从而可以帮助读者准确地理解知识点的含义并快速地学以致用。
|
關於作者: |
Joseph Albahari是《C# 9.0 in a Nutshell》《C# 10 Pocket Reference》和《LINQ Pocket Reference》(均由OReilly 出版)等书的作者。他还是流行的代码执行和LINQ查询工具LINQPad的创作者。
|
目錄:
|
目录
前言1
第1章 C#和.NET简介7
1.1 面向对象7
1.2 类型安全性8
1.3 内存管理8
1.4 平台支持9
1.5 CLR、BCL和运行时9
1.6 C#简史13
第2章 C#语言基础31
2.1 第一个C#程序31
2.2 语法33
2.3 类型基础35
2.4 数值类型46
2.5 布尔类型和运算符53
2.6 字符串和字符55
2.7 数组58
2.8 变量和参数63
2.9 表达式和运算符73
2.10 null运算符78
2.11 语句79
2.12 命名空间89
第3章 在C#中创建类型97
3.1 类97
3.2 继承116
3.3 object类型126
3.4 结构体129
3.5 访问权限修饰符132
3.6 接口134
3.7 枚举类型140
3.8 嵌套类型143
3.9 泛型145
第4章 C#的高级特性159
4.1 委托159
4.2 事件167
4.3 Lambda表达式173
4.4 匿名方法179
4.5 try语句和异常180
4.6 枚举类型和迭代器188
4.7 可空值类型193
4.8 可空引用类型198
4.9 扩展方法201
4.10 匿名类型203
4.11 元组205
4.12 记录209
4.13 模式219
4.14 特性224
4.15 调用者信息特性227
4.16 动态绑定229
4.17 运算符重载237
4.18 不安全的代码和指针240
4.19 预处理指令246
4.20 XML文档248
第5章 .NET概述253
5.1 .NET Standard254
5.2 运行时与C#语言的关系256
5.3 引用程序集257
5.4 CLR和BCL257
5.5 应用程序层261
第6章 .NET基础265
6.1 字符串与文本处理265
6.2 日期和时间278
6.3 DateOnly与TimeOnly285
6.4 DateTime与时区285
6.5 格式化和解析290
6.6 标准格式字符串与解析标记296
6.7 其他转换机制303
6.8 全球化306
6.9 操作数字308
6.10 BitOperations类312
6.11 枚举312
6.12 Guid结构体316
6.13 相等比较316
6.14 顺序比较326
6.15 实用类329
第7章 集合335
7.1 枚举335
7.2 ICollection和IList接口342
7.3 Array类345
7.4 List、Queue、Stack和Set353
7.5 字典361
7.6 自定义集合与代理367
7.7 不可变集合373
7.8 扩展相等比较和排序操作376
第8章 LINQ383
8.1 入门383
8.2 流式语法385
8.3 查询表达式391
8.4 延迟执行395
8.5 子查询401
8.6 构造方式404
8.7 投射方式408
8.8 解释型查询410
8.9 EF Core416
8.10 构建查询表达式427
第9章 LINQ运算符433
9.1 概述434
9.2 筛选437
9.3 投射441
9.4 连接453
9.5 排序461
9.6 分组464
9.7 集合运算符467
9.8 转换方法469
9.9 元素运算符472
9.10 聚合方法474
9.11 量词运算符479
9.12 生成集合的方法480
第10章 LINQ to XML483
10.1 架构概述483
10.2 X-DOM概述484
10.3 实例化X-DOM487
10.4 导航和查询490
10.5 更新X-DOM495
10.6 使用Value498
10.7 文档和声明501
10.8 名称和命名空间504
10.9 注解510
10.10 将数据投射到X-DOM511
第11章 其他XML与JSON技术515
11.1 XmlReader515
11.2 XmlWriter523
11.3 XmlReader/XmlWriter的使用模式525
11.4 处理JSON529
第12章 对象销毁与垃圾回收543
12.1 IDisposable接口、Dispose方法和Close方法543
12.2 自动垃圾回收548
12.3 终结器550
12.4 垃圾回收器的工作方式555
12.5 托管内存泄漏560
12.6 弱引用564
第13章 诊断569
13.1 条件编译569
13.2 Debug和Trace类572
13.3 调试器的集成575
13.4 进程与线程处理576
13.5 StackTrace和StackFrame类577
13.6 Windows事件日志579
13.7 性能计数器581
13.8 Stopwatch类585
13.9 跨平台诊断工具586
第14章 并发与异步591
14.1 概述591
14.2 线程592
14.3 任务606
14.4 异步编程的原则615
14.5 C#的异步函数619
14.6 异步模式638
14.7 旧有的异步编程模式646
第15章 流与I/O649
15.1 流的架构649
15.2 使用流651
15.3 流适配器664
15.4 压缩流672
15.5 操作ZIP文件675
15.6 文件与目录操作676
15.7 操作系统安全性686
15.8 内存映射文件689
第16章 网络693
16.1 .NET网络架构693
16.2 地址与端口695
16.3 URI696
16.4 HttpClient698
16.5 编写HTTP服务器706
16.6 使用DNS709
16.7 通过SmtpClient类发送邮件710
16.8 使用TCP711
16.9 使用TCP接收POP3邮件714
第17章 程序集717
17.1 程序集的组成部分717
17.2 强名称和程序集签名721
17.3 程序集名称722
17.4 认证代码签名724
17.5 资源和附属程序集727
17.6 程序集的加载、解析与隔离734
第18章 反射和元数据755
18.1 反射和激活类型755
18.2 反射并调用成员763
18.3 反射程序集776
18.4 使用特性777
18.5 动态生成代码781
18.6 生成程序集和类型788
18.7 生成类型成员791
18.8 生成泛型方法和类型797
18.9 复杂的生成目标799
18.10 解析IL802
第19章 动态编程809
19.1 动态语言运行时809
19.2 数值类型统一810
19.3 动态成员重载解析812
19.4 实现动态对象817
19.5 与动态语言进行互操作820
第20章 加密823
20.1 概述823
20.2 Windows数据保护824
20.3 哈希算法825
20.4 对称加密827
20.5 公钥加密和签名832
第21章 高级线程处理837
21.1 同步概述837
21.2 排他锁838
21.3 锁和线程安全性845
21.4 非排他锁851
21.5 使用事件等待句柄发送信号858
21.6 Barrier类864
21.7 延迟初始化866
21.8 线程本地存储868
21.9 定时器872
第22章 并行编程877
22.1 选择PFX的原因877
22.2 PLINQ880
22.3 Parallel类893
22.4 任务并行899
22.5 处理AggregateException909
22.6 并发集合911
22.7 BlockingCollection类913
第23章 Span和Memory919
23.1 Span和切片920
23.2 Memory类923
23.3 前向枚举器924
23.4 操作栈分配内存和非托管内存926
第24章 原生程序和COM组件互操作性929
24.1 调用原生DLL929
24.2 封送类型与参数930
24.3 非托管代码中的回调函数934
24.4 模拟C共用体937
24.5 共享内存938
24.6 将结构体映射到非托管内存中941
24.7 COM互操作性945
24.8 在C#中调用COM组件947
24.9 内嵌互操作类型950
24.10 在COM中访问C#对象951
第25章 正则表达式953
25.1 正则表达式基础953
25.2 量词符号958
25.3 零宽度断言959
25.4 分组962
25.5 替换并分割文本963
25.6 正则表达式实例965
25.7 正则表达式语言参考969
|
內容試閱:
|
译者序
C#是一门平衡性很好的语言。平衡就意味着取舍,以便适应多种用途。你会在嵌入式系统、桌面应用、移动端应用、Web应用、科学计算和机器学习项目以及游戏项目中与它不期而遇。但平衡又很不讨巧,一门稳如泰山的语言总给人一种微妙的感觉:是个多面手,但缺乏夺目的光彩。加之早年C#最主要的运行时.NET Framework只能在Windows平台上运行,因此在开发人员中就更显小众。这可能也是C#在20多年的历史中大部分时间只是静静地积累,在各种语言的“争奇斗艳”中显得“默默无闻”的原因之一吧!
2016年是不寻常的一年,随着.NET Core的发布,.NET的跨平台能力终于不再停留在理论层面上。而后续的持续改进—无论是底层虚拟机还是上层BCL—让它在各个技术雷达上逐步被主流的技术团队锁定。国内外的云平台也开始对.NET进行广泛的支持。而C#语言的发展也正式进入了快车道。2017~2022年这6年C#语言的版本从6.0升级到了11.0,中间发布了8次正式版本,每一次发布均包含明显的语言能力提升,社区的活力也在逐步增强。
现在是入场的绝佳时机,而本书正是学习C#的一站式读物。
C#好学吗?我听到的大部分答案是“不难”。因为它和你平时经常接触的语言太相似了。如果你使用C++、Java、JavaScript或者TypeScript,那么肯定会发现它们的相似之处。这些相似点一般也是良好的切入点。我从2001年就开始使用C#,并参与或主导了许多.NET技术栈的项目,其中最长的项目持续开发超过12年,代码规模超过500万行。在开发过程中有不少其他技术栈的同事加入其中,他们都能够在两三个星期的时间内完全适应C#开发。如果你也是其中的一员,那么本书可以作为案头参考来快速答疑解惑,帮助你解决实际的应用问题。
但是最近我也在重新审视这个问题。大部分项目的功能都存在重复性,模板代码众多。只要能够掌握语言的20%~30%就足以胜任日常开发工作。但是从功能开发到深刻理解其原理,成为设计、开发、诊断、运维的多面手的人却很少。我们需要意识到,C#是一门经历了22年风雨的语言,虽然充满了经验的积淀,但同时也存在各种各样的妥协、失误和兼容性设计。我们可能无从知晓为何在设计之初支持数组的协变,也可能感慨C# 2.0不惜进行接口上的重大变更(breaking change)引入整个泛型系统,好奇为何TryParse不返回可空类型,为何有的泛型集合没有实现对应的非泛型接口,为何Tuple的设计是失败的,GC.KeepAlive方法里为何空空如也……当我们真正探求这些细节时,之前作为切入点的“相似性”反而成为绊脚石。这些细节太过庞杂,以至于我们试图寻求一些更高层的框架和封装来规避它。但如此这般却是“而知也无涯”了,因此还是要回归本源。在我们理解了C#的设计思路后,理解其他的框架也会更加得心应手。这也是我欣赏本书的地方。它并非单纯地堆砌知识,其中不但讲解了C#的发展历史,还在每章中穿插总结了设计思路。因此,即便你对开发已经得心应手,翻阅本书也能受益匪浅。
从小老师就教导我在学习时应当笔不离手,时刻练习,这种方法也适用于学习编程语言。值得一提的是本书的作者也是LINQPad(目前.NET下最流行的代码执行工具之
一)的开发者。本书的所有范例都可以直接在LINQPad工具中运行。充分练习这些范例的内容有助于读者快速掌握C#语言的各种实践,因此我建议大家去下载这个工具,并时时修改、执行书中的代码来加深对语言的理解。
本书在前一版的基础上进行了大量的修订工作。在此,感谢本书的作者Joseph Albahari。他对我翻译本书给予了热情的帮助。我们就书中的一些技术细节进行了讨论,我将这些内容放在了译注中。感谢机械工业出版社的编辑老师,他们给予了我很多宝贵的专业建议,他们高标准的把关保证了本书的质量。感谢我的家人,她们的支持给予了我不断前行的动力。希望这本书能给大家带来愉快的阅读体验。请进入C#的精彩世界吧!
前言
C# 10是微软旗舰编程语言的第9次重大更新,显著提高了C#语言的功能性和灵活性。 一方面,它提供了一些高级抽象,例如查询表达式和异步延续;另一方面,它允许通过自定义值类型和可选指针等结构进行底层的效率优化。
C#语言特性的发展也极大地加重了我们的学担。虽然 一些工具(如 Microsoft IntelliSense 和在线参考文档)可以为工作提供诸多便利,但若要使用它们,仍需要一些 现有的概念和知识体系作为支撑。本书摒除冗长的介绍,以简明统一的方式准确阐释了 这些知识。
与之前的几个版本一样,本书也是围绕概念和用例来进行组织的,因此无论是按顺序阅 读还是随意浏览都大有裨益。虽然本书只要求读者具备基本的背景知识,但是它仍然具 有一定的深度,因此本书适合中高级读者阅读。
本书涵盖C#语言、公共语言运行时(Common Language Runtime ,CLR)和.NET 6基础类库(Base Class Library ,BCL)。我们之所以做出这样的选择,是希望为一些困难与 高级的主题留出足够的空间,而同时又不影响内容的深度与可读性。本书详细标记了C#的新特性,因此本书亦可同时作为C#7、C#8和C#9的参考书。
目标读者<
|
|