C# 7.0核心技术指南(原书第7版)
Joseph Albahari, Ben Albahari
刘夏 译
出版时间:2019年09月
页数:1072
这本畅销书籍将回答你在C# 7.0、.NET CLR和核心框架程序集遇 到的各种问题。C#语言从2000年发布到现在展现了惊人的灵活性和生命力。这种不停歇的变化也促使我们不断学习紧跟它的脚步。
本书以概念和用例为中心,为中高级程序员提供了简明的C#和.NET知识体系,是C#的权威指南。
● 快速了解C#语言,从语法、变量这些基础主题到指针、运算符重载和动态编程等高级主题。
● 通过三章内容深入解析LINQ。
● 探索并发和异步编程、高级线程编程以及并行编程。
● 全面介绍.NET特性,包括XML、正则表达式、网络、序列化、反射、应用程序域以及安全性等。
● 详细介绍Roslyn —— C# 7.0的模块化、服务化编译器。
  1. 前言
  2. 第1章 C#和.NET Framework简介
  3. 1.1 面向对象
  4. 1.2 类型安全性
  5. 1.3 内存管理
  6. 1.4 平台支持
  7. 1.5 C#和CLR
  8. 1.6 CLR和.NET Framework
  9. 1.7 其他框架
  10. 1.7.1遗留框架和小众框架
  11. 1.7.2 Windows Runtime
  12. 1.8 C#简史
  13. 1.8.1 C# 7.0新特性
  14. 1.8.2 C# 6.0新特性
  15. 1.8.3 C# 5.0新特性
  16. 1.8.4 C# 4.0新特性
  17. 1.8.5 C# 3.0新特性
  18. 1.8.6 C# 2.0新特性
  19. 第2章 C#语言基础
  20. 2.1 个C#程序
  21. 2.2 语法
  22. 2.2.1 标识符和关键字
  23. 2.2.2 字面量、标点与运算符
  24. 2.2.3 注释
  25. 2.3 类型基础
  26. 2.3.1 预定义类型示例
  27. 2.3.2 自定义类型示例
  28. 2.3.3 转换
  29. 2.3.4 值类型与引用类型
  30. 2.3.5 预定义类型分类
  31. 2.4 数值类型
  32. 2.4.1 数值字面量
  33. 2.4.2 数值转换
  34. 2.4.3 算术运算符
  35. 2.4.4 自增和自减运算符
  36. 2.4.5 特殊整数类型运算
  37. 2.4.6 8位和16位整数类型
  38. 2.4.7 特殊的float和double值
  39. 2.4.8 double和decimal的对比
  40. 2.4.9 实数的舍入误差
  41. 2.5 布尔类型和运算符
  42. 2.5.1 布尔类型转换
  43. 2.5.2 相等和比较运算符
  44. 2.5.3 条件运算符
  45. 2.6 字符串和字符
  46. 2.6.1 char转换
  47. 2.6.2 字符串类型
  48. 2.7 数组
  49. 2.7.1 默认数组元素初始化
  50. 2.7.2 多维数组
  51. 2.7.3 简化数组初始化表达式
  52. 2.7.4 边界检查
  53. 2.8 变量和参数
  54. 2.8.1 栈和堆
  55. 2.8.2 明确赋值
  56. 2.8.3 默认值
  57. 2.8.4 参数
  58. 2.8.5 引用局部变量(C# 7)
  59. 2.8.6 引用返回值(C# 7)
  60. 2.8.7 var隐式类型局部变量
  61. 2.9 表达式和运算符
  62. 2.9.1 基础表达式
  63. 2.9.2 空表达式
  64. 2.9.3 赋值表达式
  65. 2.9.4 运算符优先级和结合性
  66. 2.9.5 运算符表
  67. 2.10 null运算符
  68. 2.10.1 null合并运算符
  69. 2.10.2 null条件运算符(C# 6)
  70. 2.11 语句
  71. 2.11.1 声明语句
  72. 2.11.2 表达式语句
  73. 2.11.3 选择语句
  74. 2.11.4 迭代语句
  75. 2.11.5 跳转语句
  76. 2.11.6 其他语句
  77. 2.12 命名空间
  78. 2.12.1 using指令
  79. 2.12.2 using static指令(C# 6)
  80. 2.12.3 命名空间中的规则
  81. 2.12.4 类型和命名空间别名
  82. 2.12.5 命名空间特性
  83. 第3章 在C#中创建类型
  84. 3.1 类
  85. 3.1.1 字段
  86. 3.1.2 方法
  87. 3.1.3 实例构造器
  88. 3.1.4 对象初始化器
  89. 3.1.5 this引用
  90. 3.1.6 属性
  91. 3.1.7 索引器
  92. 3.1.8 常量
  93. 3.1.9 静态构造器
  94. 3.1.10 静态类
  95. 3.1.11 终结器
  96. 3.1.12 分部类型和方法
  97. 3.1.13 nameof运算符(C#6)
  98. 3.2 继承
  99. 3.2.1 多态
  100. 3.2.2 类型转换和引用转换
  101. 3.2.3 虚函数成员
  102. 3.2.4 抽象类和抽象成员
  103. 3.2.5 隐藏继承成员
  104. 3.2.6 密封函数和类
  105. 3.2.7 base关键字
  106. 3.2.8 构造器和继承
  107. 3.2.9 重载和解析
  108. 3.3 object类型
  109. 3.3.1 装箱和拆箱
  110. 3.3.2 静态和运行时类型检查
  111. 3.3.3 GetType方法和typeof运算符
  112. 3.3.4 ToString方法
  113. 3.3.5 object的成员列表
  114. 3.4 结构体
  115. 3.5 访问权限修饰符
  116. 3.5.1 示例
  117. 3.5.2 友元程序集
  118. 3.5.3 可访问性封顶
  119. 3.5.4 访问权限修饰符的限制
  120. 3.6 接口
  121. 3.6.1 扩展接口
  122. 3.6.2 显式接口实现
  123. 3.6.3 虚方法实现接口成员
  124. 3.6.4 在子类中重新实现接口
  125. 3.6.5 接口和装箱
  126. 3.7 枚举类型
  127. 3.7.1 枚举类型转换
  128. 3.7.2 标志枚举类型
  129. 3.7.3 枚举运算符
  130. 3.7.4 类型安全问题
  131. 3.8 嵌套类型
  132. 3.9 泛型
  133. 3.9.1 泛型类型
  134. 3.9.2 为什么需要泛型
  135. 3.9.3 泛型方法
  136. 3.9.4 声明类型参数
  137. 3.9.5 typeof和未绑定泛型类型
  138. 3.9.6 泛型的默认值
  139. 3.9.7 泛型的约束
  140. 3.9.8 继承泛型类型
  141. 3.9.9 自引用泛型声明
  142. 3.9.10 静态数据
  143. 3.9.11 类型参数的转换
  144. 3.9.12 协变
  145. 3.9.13 逆变
  146. 3.9.14 C#泛型和C++模板对比
  147. 第4章 C#的 特性
  148. 4.1 委托
  149. 4.1.1 用委托书写插件方法
  150. 4.1.2 多播委托
  151. 4.1.3 实例目标方法和静态目标方法
  152. 4.1.4 泛型委托类型
  153. 4.1.5 Func和Action委托
  154. 4.1.6 委托和接口
  155. 4.1.7 委托的兼容性
  156. 4.2 事件
  157. 4.2.1 标准事件模式
  158. 4.2.2 事件访问器
  159. 4.2.3 事件的修饰符
  160. 4.3 Lambda表达式
  161. 4.3.1 显式Lambda参数的类型
  162. 4.3.2 捕获外部变量
  163. 4.3.3 Lambda表达式和局部方法的对比
  164. 4.4 匿名方法
  165. 4.5 try语句和异常
  166. 4.5.1 catch子句
  167. 4.5.2 finally块
  168. 4.5.3 抛出异常
  169. 4.5.4 System.Exception的关键属性
  170. 4.5.5 常用的异常类型
  171. 4.5.6 TryXXX方法模式
  172. 4.5.7 异常的替代方式
  173. 4.6 可枚举类型和迭代器
  174. 4.6.1 可枚举类型
  175. 4.6.2 集合的初始化器
  176. 4.6.3 迭代器
  177. 4.6.4 迭代器语义
  178. 4.6.5 组合序列
  179. 4.7 可空类型
  180. 4.7.1 Nullable<T>结构体
  181. 4.7.2 隐式和显式的可空对象转换
  182. 4.7.3 装箱拆箱可空值
  183. 4.7.4 运算符优先级提升
  184. 4.7.5 在bool?上使用&和|运算符
  185. 4.7.6 可空类型和null运算符
  186. 4.7.7 可空类型的应用场景
  187. 4.7.8 可空类型的替代方案
  188. 4.8 扩展方法
  189. 4.8.1 扩展方法链
  190. 4.8.2 二义性与解析
  191. 4.9 匿名类型
  192. 4.10 元组(C# 7)
  193. 4.10.1 元组元素命名
  194. 4.10.2 ValueTuple.Create
  195. 4.10.3 元组的解构
  196. 4.10.4 元组的比较
  197. 4.10.5 System.Tuple类
  198. 4.11 特性
  199. 4.11.1 特性类
  200. 4.11.2 命名和位置特性参数
  201. 4.11.3 特性的目标
  202. 4.11.4 多个特性
  203. 4.12 调用者信息特性
  204. 4.13 动态绑定
  205. 4.13.1 静态绑定与动态绑定
  206. 4.13.2 自定义绑定
  207. 4.13.3 语言绑定
  208. 4.13.4 RuntimeBinderException
  209. 4.13.5 动态类型的运行时表示
  210. 4.13.6 动态转换
  211. 4.13.7 var与dynamic
  212. 4.13.8 动态表达式
  213. 4.13.9 无动态接收者的动态调用
  214. 4.13.10 动态表达式中的静态类型
  215. 4.13.11 不可调用的函数
  216. 4.14 运算符重载
  217. 4.14.1 运算符函数
  218. 4.14.2 重载等号和比较运算符
  219. 4.14.3 自定义隐式和显式转换
  220. 4.14.4 重载true和false
  221. 4.15 不安全的代码和指针
  222. 4.15.1 指针基础
  223. 4.15.2 不安全的代码
  224. 4.15.3 fixed语句
  225. 4.15.4 指针取成员运算符
  226. 4.15.5 数组
  227. 4.15.6 void*
  228. 4.15.7 指向非托管代码的指针
  229. 4.16 预处理指令
  230. 4.16.1 Conditional特性
  231. 4.16.2 Pragma警告
  232. 4.17 XML文档
  233. 4.17.1 标准的XML文档标签
  234. 4.17.2 用户定义标签
  235. 4.17.3 类型或成员交叉引用
  236. 第5章 框架概述
  237. 5.1 .NET标准2.0
  238. 5.1.1 旧版本.NET标准
  239. 5.1.2 引用程序集
  240. 5.2 CLR和核心框架
  241. 5.2.1 系统类型
  242. 5.2.2 文本处理
  243. 5.2.3 集合
  244. 5.2.4 查询
  245. 5.2.5 XML
  246. 5.2.6 诊断
  247. 5.2.7 并发与异步
  248. 5.2.8 流与I/O
  249. 5.2.9 网络
  250. 5.2.10 序列化
  251. 5.2.11 程序集、反射和特性
  252. 5.2.12 动态编程
  253. 5.2.13 安全性
  254. 5.2.14 线程功能
  255. 5.2.15 并行编程
  256. 5.2.16 应用程序域
  257. 5.2.17 原生互操作性与COM互操作性
  258. 5.3 应用技术
  259. 5.3.1 用户界面API
  260. 5.3.2 后台技术
  261. 5.3.3 分布式系统技术
  262. 第6章 框架基础
  263. 6.1 字符串与文本处理
  264. 6.1.1 字符
  265. 6.1.2 字符串
  266. 6.1.3 字符串的比较
  267. 6.1.4 StringBuilder
  268. 6.1.5 文本编码和Unicode
  269. 6.2 日期和时间
  270. 6.2.1 TimeSpan
  271. 6.2.2 DateTime和DateTimeOffset
  272. 6.3 日期和时区
  273. 6.3.1 DateTime与时区
  274. 6.3.2 DateTimeOffset与时区
  275. 6.3.3 TimeZone和TimeZoneInfo
  276. 6.3.4 夏令时与DateTime
  277. 6.4 格式化和解析
  278. 6.4.1 ToString和Parse
  279. 6.4.2 格式提供器
  280. 6.5 标准格式字符串与解析标记
  281. 6.5.1 数字格式字符串
  282. 6.5.2 NumberStyles
  283. 6.5.3 Date/Time格式字符串
  284. 6.5.4 DateTimeStyles
  285. 6.5.5 枚举的格式字符串
  286. 6.6 其他转换机制
  287. 6.6.1 Convert类
  288. 6.6.2 XmlConvert
  289. 6.6.3 类型转换器
  290. 6.6.4 BitConverter
  291. 6.7 全球化
  292. 6.7.1 化检查清单
  293. 6.7.2 测试
  294. 6.8 操作数字
  295. 6.8.1 转换
  296. 6.8.2 Math
  297. 6.8.3 BigInteger
  298. 6.8.4 Complex
  299. 6.8.5 Random
  300. 6.9 枚举
  301. 6.9.1 枚举值转换
  302. 6.9.2 列举枚举值
  303. 6.9.3 枚举的工作方式
  304. 6.10 Guid结构体
  305. 6.11 相等比较
  306. 6.11.1 值相等和引用相等
  307. 6.11.2 标准等值比较协议
  308. 6.11.3 相等比较和自定义类型
  309. 6.12 顺序比较
  310. 6.12.1 IComparable
  311. 6.12.2 <和>
  312. 6.12.3 实现IComparable接口
  313. 6.13 实用类
  314. 6.13.1 Console类
  315. 6.13.2 Environment类
  316. 6.13.3 Process类
  317. 6.13.4 AppContext类
  318. 第7章 集合
  319. 7.1 枚举
  320. 7.1.1 IEnumerable和IEnumerator
  321. 7.1.2 IEnumerable<T>和IEnumerator<T>
  322. 7.1.3 实现枚举接口
  323. 7.2 ICollection和IList接口
  324. 7.2.1 ICollection<T>和ICollection
  325. 7.2.2 IList<T>和IList
  326. 7.2.3 IReadOnlyList<T>
  327. 7.3 Array类
  328. 7.3.1 创建和索引
  329. 7.3.2 枚举
  330. 7.3.3 长度和维数
  331. 7.3.4 搜索
  332. 7.3.5 排序
  333. 7.3.6 反转数组元
  334. 7.3.7 复制数组
  335. 7.3.8 转换和调整大小
  336. 7.4 List、Queue、Stack和Set
  337. 7.4.1 List<T>和ArrayList
  338. 7.4.2 LinkedList<T>
  339. 7.4.3 Queue<T>和Queue
  340. 7.4.4 Stack<T>和Stack
  341. 7.4.5 BitArray
  342. 7.4.6 HashSet<T>和SortedSet<T>
  343. 7.5 字典
  344. 7.5.1 IDictionary<TKey, TValue>
  345. 7.5.2 IDictionary
  346. 7.5.3 Dictionary<TKey, TValue>和HashTable
  347. 7.5.4 OrderedDictionary
  348. 7.5.5 ListDictionary和HybridDictionary
  349. 7.5.6 排序字典
  350. 7.6 自定义集合与代理
  351. 7.6.1 Collection<T>和CollectionBase
  352. 7.6.2 KeyedCollection<TKey, TValue>和DictionaryBase
  353. 7.6.3 ReadOnlyCollection<T>
  354. 7.7 扩展相等比较和排序操作
  355. 7.7.1 IEqualityComparer和EqualityComparer
  356. 7.7.2 IComparer和Comparer
  357. 7.7.3 StringComparer
  358. 7.7.4 IStructuralEquatable和IStructuralComparable
  359. 第8章 LINQ查询
  360. 8.1 入门
  361. 8.2 流式语法
  362. 8.2.1 查询运算符链
  363. 8.2.2 使用Lambda表达式
  364. 8.2.3 原始顺序
  365. 8.2.4 其他运算符
  366. 8.3 查询表达式
  367. 8.3.1 范围变量
  368. 8.3.2 LINQ查询语法与SQL语法
  369. 8.3.3 查询语法和流式语法
  370. 8.3.4 混合查询语法
  371. 8.4 延迟执行
  372. 8.4.1 重复执行
  373. 8.4.2 捕获变量
  374. 8.4.3 延迟执行的工作原理
  375. 8.4.4 串联装饰器
  376. 8.4.5 查询语句的执行方式
  377. 8.5 子查询
  378. 8.6 构造方式
  379. 8.6.1 渐进式查询构造
  380. 8.6.2 into关键字
  381. 8.6.3 查询的包装
  382. 8.7 映射方式
  383. 8.7.1 对象初始化器
  384. 8.7.2 匿名类型
  385. 8.7.3 let关键字
  386. 8.8 解释型查询
  387. 8.8.1 解释型查询的工作机制
  388. 8.8.2 综合使用解释型查询和本地查询
  389. 8.8.3 AsEnumerable方法
  390. 8.9 LINQ to SQL和Entity Framework
  391. 8.9.1 LINQ to SQL的实体类
  392. 8.9.2 Entity Framework的实体类
  393. 8.9.3 DataContext和ObjectContext
  394. 8.9.4 关联
  395. 8.9.5 L2S和EF的延迟执行
  396. 8.9.6 DataLoadOptions
  397. 8.9.7 Entity Framework中的立即加载功能
  398. 8.9.8 更新
  399. 8.9.9 L2S和EF的API对比
  400. 8.10 构建查询表达式
  401. 8.10.1 委托与表达式树
  402. 8.10.2 表达式树
  403. 第9章 LINQ运算符
  404. 9.1 概述
  405. 9.1.1 序列→序列
  406. 9.1.2 序列→元素或标量值
  407. 9.1.3 void→序列
  408. 9.2 筛选
  409. 9.2.1 Where
  410. 9.2.2 Take和Skip运算符
  411. 9.2.3 TakeWhile和SkipWhile
  412. 9.2.4 Distinct
  413. 9.3 映射
  414. 9.3.1 Select
  415. 9.3.2 SelectMany
  416. 9.4 连接
  417. 9.4.1 Join和GroupJoin
  418. 9.4.2 Zip运算符
  419. 9.5 排序
  420. 9.6 分组
  421. 9.7 集合运算符
  422. 9.7.1 Concat和Union
  423. 9.7.2 Intersect和Except
  424. 9.8 转换方法
  425. 9.8.1 OfType和Cast
  426. 9.8.2 ToArray、ToList、ToDictionary和ToLookup
  427. 9.8.3 AsEnumerable和AsQueryable
  428. 9.9 元素运算符
  429. 9.9.1 First、Last和Single
  430. 9.9.2 ElementAt运算符
  431. 9.9.3 DefaultIfEmpty
  432. 9.10 聚合方法
  433. 9.10.1 Count和LongCount
  434. 9.10.2 Min和Max
  435. 9.10.3 Sum和Average
  436. 9.10.4 Aggregate
  437. 9.11 量词运算符
  438. 9.11.1 Contains和Any
  439. 9.11.2 All和SequenceEqual
  440. 9.12 生成集合的方法
  441. 9.12.1 Empty
  442. 9.12.2 Range和Repeat
  443. 第10章 LINQ to XML
  444. 10.1 架构概述
  445. 10.1.1 什么是DOM
  446. 10.1.2 LINQ to XML的DOM
  447. 10.2 X-DOM概述
  448. 10.2.1 加载和解析
  449. 10.2.2 保存和序列化
  450. 10.3 实例化X-DOM
  451. 10.3.1 函数式构建
  452. 10.3.2 指定内容
  453. 10.3.3 自动深度克隆
  454. 10.4 导航和查询
  455. 10.4.1 导航至子节点
  456. 10.4.2 导航至父节点
  457. 10.4.3 导航至同级节点
  458. 10.4.4 导航至节点的属性
  459. 10.5 更新X-DOM
  460. 10.5.1 简单的值更新
  461. 10.5.2 更新子节点和属性
  462. 10.5.3 通过父节点更新子节点
  463. 10.6 使用Value
  464. 10.6.1 设置Value
  465. 10.6.2 获得Value
  466. 10.6.3 值与混合内容节点
  467. 10.6.4 自动连接XText节点
  468. 10.7 文档和声明
  469. 10.7.1 XDocument
  470. 10.7.2 XML声明
  471. 10.8 名称和命名空间
  472. 10.8.1 XML中的命名空间
  473. 10.8.2 在X-DOM中指定命名空间
  474. 10.8.3 X-DOM和默认命名空间
  475. 10.8.4 前缀
  476. 10.9 注解
  477. 10.10 将数据映射到X-DOM
  478. 10.10.1 排除空元素
  479. 10.10.2 流映射
  480. 10.10.3 转换X-DOM
  481. 第11章 其他XML技术
  482. 11.1 XmlReader
  483. 11.1.1 读取节点
  484. 11.1.2 读取元素
  485. 11.1.3 读取属性
  486. 11.1.4 命名空间和前缀
  487. 11.2 XmlWriter
  488. 11.2.1 写入属性
  489. 11.2.2 写入其他类型节点
  490. 11.2.3 命名空间和前缀
  491. 11.3 XmlReader/XmlWriter的使用模式
  492. 11.3.1 处理多层次结构数据
  493. 11.3.2 混合使用XmlReader/XmlWriter和X-DOM
  494. 11.4 XSD和大纲的验证
  495. 11.5 XSLT
  496. 第12章 对象销毁与垃圾回收
  497. 12.1 IDisposable接口、Dispose方法和Close方法
  498. 12.1.1 标准销毁语义
  499. 12.1.2 销毁对象的时机
  500. 12.1.3 选择性销毁
  501. 12.1.4 在销毁时清理字段
  502. 12.2 自动垃圾回收
  503. 12.2.1 根
  504. 12.2.2 垃圾回收和WinRT
  505. 12.3 终结器
  506. 12.3.1 在终结器中调用Dispose
  507. 12.3.2 对象的复活
  508. 12.4 垃圾回收器的工作方式
  509. 12.4.1 优化技术
  510. 12.4.2 强制垃圾回收
  511. 12.4.3 垃圾回收过程的调整
  512. 12.4.4 内存压力
  513. 12.5 托管内存泄露
  514. 12.5.1 定时器
  515. 12.5.2 诊断内存泄露
  516. 12.6 弱引用
  517. 12.6.1 弱引用和缓存
  518. 12.6.2 弱引用和事件
  519. 第13章 诊断
  520. 13.1 条件编译
  521. 13.1.1 条件编译与静态变量标志
  522. 13.1.2 Conditional特性
  523. 13.2 Debug和Trace类
  524. 13.2.1 Fail和Assert方法
  525. 13.2.2 TraceListener类
  526. 13.2.3 刷新并关闭监听器
  527. 13.3 调试器的集成
  528. 13.3.1 附加和断点
  529. 13.3.2 Debugger特性
  530. 13.4 进程与线程处理
  531. 13.4.1 检查运行中的进程
  532. 13.4.2 在进程中检查线程
  533. 13.5 StackTrace和StackFrame类
  534. 13.6 Windows事件日志
  535. 13.6.1 写入事件日志
  536. 13.6.2 读取事件日志
  537. 13.6.3 监视事件日志
  538. 13.7 性能计数器
  539. 13.7.1 遍历可用的计数器
  540. 13.7.2 检索性能计数器
  541. 13.7.3 创建计数器并写入性能数据
  542. 13.8 Stopwatch类
  543. 第14章 并发与异步
  544. 14.1 概述
  545. 14.2 线程
  546. 14.2.1 创建线程
  547. 14.2.2 汇合与休眠
  548. 14.2.3 阻塞
  549. 14.2.4 本地状态与共享状态
  550. 14.2.5 锁与线程安全
  551. 14.2.6 向线程传递数据
  552. 14.2.7 异常处理
  553. 14.2.8 前台线程与后台线程
  554. 14.2.9 线程的优先级
  555. 14.2.10 信号发送
  556. 14.2.11 富客户端应用程序的线程
  557. 14.2.12 同步上下文
  558. 14.2.13 线程池
  559. 14.3 任务
  560. 14.3.1 启动任务
  561. 14.3.2 返回值
  562. 14.3.3 异常
  563. 14.3.4 延续
  564. 14.3.5 TaskCompletionSource类
  565. 14.3.6 Task.Delay方法
  566. 14.4 异步原则
  567. 14.4.1 同步操作与异步操作
  568. 14.4.2 什么是异步编程
  569. 14.4.3 异步编程与延续
  570. 14.4.4 语言支持的重要性
  571. 14.5 C#的异步函数
  572. 14.5.1 等待
  573. 14.5.2 编写异步函数
  574. 14.5.3 异步Lambda表达式
  575. 14.5.4 WinRT中的异步方法
  576. 14.5.5 异步与同步上下文
  577. 14.5.6 优化
  578. 14.6 异步模式
  579. 14.6.1 取消操作
  580. 14.6.2 进度报告
  581. 14.6.3 基于任务的异步模式
  582. 14.6.4 任务组合器
  583. 14.7 已废弃的模式
  584. 14.7.1 异步编程模型(APM)
  585. 14.7.2 基于事件的异步模式(EAP)
  586. 14.7.3 BackgroundWorker类
  587. 第15章 流与I/O
  588. 15.1 .NET流的架构
  589. 15.2 使用流
  590. 15.2.1 读取和写入
  591. 15.2.2 查找
  592. 15.2.3 关闭和刷新
  593. 15.2.4 超时
  594. 15.2.5 线程安全
  595. 15.2.6 后台存储流
  596. 15.2.7 FileStream类
  597. 15.2.8 MemoryStream
  598. 15.2.9 PipeStream
  599. 15.2.10 BufferedStream
  600. 15.3 流适配器
  601. 15.3.1 文本适配器
  602. 15.3.2 二进制适配器
  603. 15.3.3 关闭和销毁流适配器
  604. 15.4 压缩流
  605. 15.5 操作ZIP文件
  606. 15.6 文件与目录操作
  607. 15.6.1 File类
  608. 15.6.2 Directory类
  609. 15.6.3 FileInfo类和DirectoryInfo类
  610. 15.6.4 Path类型
  611. 15.6.5 特殊文件夹
  612. 15.6.6 查询卷信息
  613. 15.6.7 捕获文件系统事件
  614. 15.7 在UWP中进行文件I/O操作
  615. 15.7.1 操作目录
  616. 15.7.2 操作文件
  617. 15.7.3 UWP应用的独立存储区
  618. 15.8 内存映射文件
  619. 15.8.1 内存映射文件和随机I/O
  620. 15.8.2 内存映射文件和共享内存
  621. 15.8.3 使用视图访问器
  622. 15.9 独立存储区
  623. 第16章 网络
  624. 16.1 .NET网络架构
  625. 16.2 地址与端口
  626. 16.3 URI
  627. 16.4 客户端类型
  628. 16.4.1 WebClient类
  629. 16.4.2 WebRequest和WebResponse
  630. 16.4.3 HttpClient类
  631. 16.4.4 代理
  632. 16.4.5 身份验证
  633. 16.4.6 异常处理
  634. 16.5 使用HTTP
  635. 16.5.1 头部信息
  636. 16.5.2 查询字符串
  637. 16.5.3 上传表单数据
  638. 16.5.4 cookie
  639. 16.5.5 表单验证
  640. 16.5.6 SSL
  641. 16.6 编写HTTP服务器
  642. 16.7 使用FTP
  643. 16.8 使用DNS
  644. 16.9 通过SmtpClient类发送邮件
  645. 16.10 使用TCP
  646. 16.11 使用TCP接收POP3邮件
  647. 16.12 在Windows Runtime中使用TCP
  648. 第17章 序列化
  649. 17.1 序列化的概念
  650. 17.1.1 序列化引擎
  651. 17.1.2 格式化器
  652. 17.1.3 显式和隐式序列化
  653. 17.2 数据契约的序列化
  654. 17.2.1 DataContractSerializer与NetDataContractSerializer
  655. 17.2.2 使用序列化器
  656. 17.2.3 序列化子类
  657. 17.2.4 对象引用
  658. 17.2.5 版本容错性
  659. 17.2.6 成员顺序
  660. 17.2.7 null和空值
  661. 17.3 数据契约与集合
  662. 17.3.1 子类集合元素
  663. 17.3.2 自定义集合与元素名称
  664. 17.4 扩展数据契约
  665. 17.4.1 序列化与反序列化钩子
  666. 17.4.2 与[Serializable]的互操作
  667. 17.4.3 与IXmlSerializable的互操作
  668. 17.5 二进制序列化器
  669. 17.6 二进制序列化特性
  670. 17.6.1 [NonSerialized]
  671. 17.6.2 [OnDeserializing]和[OnDeserialized]
  672. 17.6.3 [OnSerializing]和[OnSerialized]
  673. 17.6.4 [OptionalField]特性和版本
  674. 17.7 使用ISerializable接口进行二进制序列化
  675. 17.8 XML序列化
  676. 17.8.1 基于特性的序列化入门
  677. 17.8.2 子类和子对象
  678. 17.8.3 序列化集合
  679. 17.8.4 IXmlSerializable接口
  680. 第18章 程序集
  681. 18.1 程序集的组成部分
  682. 18.1.1 程序集清单
  683. 18.1.2 应用程序清单
  684. 18.1.3 模块
  685. 18.1.4 Assembly类
  686. 18.2 强名称和程序集签名
  687. 18.2.1 如何为程序集添加强名称
  688. 18.2.2 延迟签名
  689. 18.3 程序集名称
  690. 18.3.1 完全限定名称
  691. 18.3.2 AssemblyName类
  692. 18.3.3 程序集的信息版本和文件版本
  693. 18.4 认证代码签名
  694. 18.4.1 如何进行认证代码签名
  695. 18.4.2 认证代码验证
  696. 18.5 全局程序集缓存
  697. 18.5.1 如何将程序集安装到GAC
  698. 18.5.2 GAC和版本控制
  699. 18.6 资源和附属程序集
  700. 18.6.1 直接嵌入资源
  701. 18.6.2 .resources文件
  702. 18.6.3 .resx文件
  703. 18.6.4 附属程序集
  704. 18.6.5 文化和子文化
  705. 18.7 程序集的解析和加载
  706. 18.7.1 程序集和类型解析规则
  707. 18.7.2 AssemblyResolve事件
  708. 18.7.3 加载程序集
  709. 18.8 在基础目录之外部署程序集
  710. 18.9 打包单个可执行文件
  711. 18.10 处理未引用的程序集
  712. 第19章 反射和元数据
  713. 19.1 反射和激活类型
  714. 19.1.1 获取类型
  715. 19.1.2 类型名称
  716. 19.1.3 基本类型和接口
  717. 19.1.4 实例化类型
  718. 19.1.5 泛型类型
  719. 19.2 反射并调用成员
  720. 19.2.1 成员类型
  721. 19.2.2 C#成员与CLR成员
  722. 19.2.3 泛型类型成员
  723. 19.2.4 动态调用成员
  724. 19.2.5 方法的参数
  725. 19.2.6 使用委托提高性能
  726. 19.2.7 访问非公有成员
  727. 19.2.8 泛型方法
  728. 19.2.9 调用未知类型的泛型接口成员
  729. 19.3 反射程序集
  730. 19.3.1 将程序集加载至只反射的上下文中
  731. 19.3.2 模块
  732. 19.4 使用特性
  733. 19.4.1 特性基础
  734. 19.4.2 AttributeUsage特性
  735. 19.4.3 定义自定义的特性
  736. 19.4.4 在运行时检索特性
  737. 19.4.5 在只反射上下文下检索特性
  738. 19.5 动态生成代码
  739. 19.5.1 使用DynamicMethod生成IL
  740. 19.5.2 评估栈
  741. 19.5.3 向动态方法传递参数
  742. 19.5.4 生成局部变量
  743. 19.5.5 分支
  744. 19.5.6 实例化对象和调用实例方法
  745. 19.5.7 异常处理
  746. 19.6 生成程序集和类型
  747. 19.6.1 保存生成的程序集
  748. 19.6.2 Reflection.Emit对象模型
  749. 19.7 生成类型成员
  750. 19.7.1 生成方法
  751. 19.7.2 生成字段和属性
  752. 19.7.3 生成构造器
  753. 19.7.4 附加特性
  754. 19.8 生成泛型方法和类型
  755. 19.8.1 定义泛型方法
  756. 19.8.2 定义泛型类型
  757. 19.9 复杂的生成目标
  758. 19.9.1 未创建的封闭式泛型
  759. 19.9.2 循环依赖
  760. 19.10 解析IL
  761. 第20章 动态编程
  762. 20.1 动态语言运行时
  763. 20.2 数值类型统一
  764. 20.3 动态成员重载解析
  765. 20.3.1 简化访问者模式
  766. 20.3.2 调用未知类型的泛型类型成员
  767. 20.4 实现动态对象
  768. 20.4.1 DynamicObject
  769. 20.4.2 ExpandoObject
  770. 20.5 与动态语言进行互操作
  771. 第21章 安全
  772. 21.1 代码访问安全性
  773. 21.2 身份和角色安全
  774. 21.2.1 权限
  775. 21.2.2 声明式安全性与命令式安全性
  776. 21.2.3 实现身份和角色安全
  777. 21.2.4 设定用户和角色
  778. 21.3 操作系统安全性
  779. 21.3.1 在标准用户账户下运行程序
  780. 21.3.2 管理员权限提升与虚拟化
  781. 21.4 加密概述
  782. 21.5 Windows数据保护
  783. 21.6 散列法
  784. 21.7 对称加密
  785. 21.7.1 内存加密
  786. 21.7.2 串联加密流
  787. 21.7.3 销毁加密对象
  788. 21.7.4 密钥管理
  789. 21.8 公钥加密和签名
  790. 21.8.1 RSA类
  791. 21.8.2 数字签名
  792. 第22章 高级线程处理
  793. 22.1 同步概述
  794. 22.2 排它锁
  795. 22.2.1 lock语句
  796. 22.2.2 Monitor.Enter方法和Monitor.Exit方法
  797. 22.2.3 选择同步对象
  798. 22.2.4 使用锁的时机
  799. 22.2.5 锁与原子性
  800. 22.2.6 嵌套锁
  801. 22.2.7 死锁
  802. 22.2.8 性能
  803. 22.2.9 Mutex
  804. 22.3 锁和线程安全性
  805. 22.3.1 线程安全和.NET Framework类型
  806. 22.3.2 应用服务器的线程安全性
  807. 22.3.3 不可变对象
  808. 22.4 非排它锁
  809. 22.4.1 信号量
  810. 22.4.2 读写锁
  811. 22.5 使用事件等待句柄发送信号
  812. 22.5.1 AutoResetEvent
  813. 22.5.2 ManualResetEvent
  814. 22.5.3 CountdownEvent
  815. 22.5.4 创建跨进程的EventWaitHandle
  816. 22.5.5 等待句柄和延续操作
  817. 22.5.6 将等待句柄转换为任务
  818. 22.5.7 WaitAny、WaitAll和SignalAndWait
  819. 22.6 Barrier类
  820. 22.7 延迟初始化
  821. 22.7.1 Lazy
  822. 22.7.2 LazyInitializer类
  823. 22.8 线程本地存储
  824. 22.8.1 [ThreadStatic]特性
  825. 22.8.2 ThreadLocal类
  826. 22.8.3 GetData方法和SetData方法
  827. 22.9 Interrupt和Abort方法
  828. 22.10 Suspend和Resume方法
  829. 22.11 定时器
  830. 22.11.1 多线程定时器
  831. 22.11.2 单线程定时器
  832. 第23章 并行编程
  833. 23.1 选择PFX的原因
  834. 23.1.1 PFX的概念
  835. 23.1.2 PFX组件
  836. 23.1.3 使用PFX的场合
  837. 23.2 PLINQ
  838. 23.2.1 并行执行的特性
  839. 23.2.2 PLINQ与顺序
  840. 23.2.3 PLINQ的限制
  841. 23.2.4 示例:并行拼写检查器
  842. 23.2.5 纯函数
  843. 23.2.6 设置并行级别
  844. 23.2.7 取消操作
  845. 23.2.8 PLINQ优化
  846. 23.3 Parallel类
  847. 23.3.1 Parallel.Invoke方法
  848. 23.3.2 Parallel.For方法和Parallel.ForEach方法
  849. 23.4 任务并行
  850. 23.4.1 创建并启动任务
  851. 23.4.2 等待多个任务
  852. 23.4.3 取消任务
  853. 23.4.4 延续任务
  854. 23.4.5 任务调度器
  855. 23.4.6 TaskFactory类
  856. 23.5 处理AggregateException
  857. 23.6 并发集合
  858. 23.6.1 IProducerConsumerCollection接口
  859. 23.6.2 ConcurrentBag类
  860. 23.7 BlockingCollection类
  861. 第24章 应用程序域
  862. 24.1 应用程序域的架构
  863. 24.2 创建和销毁应用程序域
  864. 24.3 使用多个应用程序域
  865. 24.4 DoCallBack方法
  866. 24.5 监视应用程序域
  867. 24.6 应用程序域和线程
  868. 24.7 在应用程序域间共享数据
  869. 24.7.1 通过“槽”共享数据
  870. 24.7.2 进程内Remoting通信
  871. 24.7.3 隔离类型与程序集
  872. 第25章 原生程序和COM组件互操作性
  873. 25.1 调用原生DLL
  874. 25.2 类型的封送
  875. 25.2.1 常见类型的封送
  876. 25.2.2 类和结构体的封送
  877. 25.2.3 in和out参数封送
  878. 25.3 非托管代码中的回调函数
  879. 25.4 模拟C共用体
  880. 25.5 共享内存
  881. 25.6 将结构体映射到非托管内存中
  882. 25.7 COM互操作性
  883. 25.7.1 COM的目的
  884. 25.7.2 COM类型系统基础
  885. 25.8 在C#中调用COM组件
  886. 25.8.1 可选参数和命名参数
  887. 25.8.2 隐式ref参数
  888. 25.8.3 索引器
  889. 25.8.4 动态绑定
  890. 25.9 内嵌互操作类型
  891. 25.10 主互操作程序集
  892. 25.11 在COM中调用C#对象
  893. 第26章 正则表达式
  894. 26.1 正则表达式基础
  895. 26.1.1 编译正则表达式
  896. 26.1.2 RegexOptions属性
  897. 26.1.3 字符转义
  898. 26.1.4 字符集合
  899. 26.2 量词符号
  900. 26.3 零宽度断言
  901. 26.3.1 前向条件和后向条件
  902. 26.3.2 锚点
  903. 26.3.3 单词边界
  904. 26.4 分组
  905. 26.5 替换并分割文本
  906. 26.5.1 MatchEvaluator委托
  907. 26.5.2 拆分文本
  908. 26.6 正则表达式实例
  909. 26.6.1 匹配美国社会保险号/电话号码
  910. 26.6.2 提取“name=value”中的名称和值(一行一个)
  911. 26.6.3 强密码验证
  912. 26.6.4 每行至少80个字符
  913. 26.6.5 解析日期/时间(N/N/N H:M:S AM/PM)
  914. 26.6.6 匹配罗马字符
  915. 26.6.7 删除重复单词
  916. 26.6.8 统计单词数目
  917. 26.6.9 匹配Guid
  918. 26.6.10 解析XML/HTML标签
  919. 26.6.11 分隔驼峰命名单词
  920. 26.6.12 获得合法的文件名
  921. 26.6.13 将Unicode字符转义为HTML
  922. 26.6.14 反转义HTTP查询字符串中的字符
  923. 26.6.15 从网站统计日志中解析谷歌搜索关键词
  924. 26.7 正则表达式语言参考
  925. 第27章 Roslyn编译器
  926. 27.1 Roslyn架构
  927. 27.2 语法树
  928. 27.2.1 语法树的结构
  929. 27.2.2 获取语法树
  930. 27.2.3 语法树的遍历和搜索
  931. 27.2.4 非关键信息
  932. 27.2.5 语法树的转换
  933. 27.3 编译过程和语义模型
  934. 27.3.1 创建编译过程
  935. 27.3.2 生成程序集
  936. 27.3.3 查询语义模型
  937. 27.3.4 示例:修改符号名称
书名:C# 7.0核心技术指南(原书第7版)
译者:刘夏 译
国内出版社:机械工业出版社
出版时间:2019年09月
页数:1072
书号:978-7-111-63134-7
原版书书名:C# 7.0 in a Nutshell: The Definitive Reference
原版书出版商:O'Reilly Media
Joseph Albahari
 
Joseph Albahari是C# 8.0 Pocket Reference和LINQ Pocket Reference的作 者。他还是流行的代码编辑执行和LINQ查询工具LINQPad的创作者。

Joseph Albahari是澳大利亚Egton Software Services的一名核心C#设计架构师,该公司是英国最大的主要医疗保健软件销售商的供应商。他在.NET和其他平台上开发大规模的企业级应用程序的时间超过了15年,致力于医疗、通信和教育产业。Joseph专门研究设计自定义组件,并已为三个公司写了应用程序框架。
 
 
Ben Albahari
 
Ben Albahari是Take On It创始人,曾在Microsoft担任5年项目经理,参与了.NET Compact Framework和ADO.NET等项目。

Ben Albahari是Genamics的创建人之一,该公司是一家C#和J++程序开发工具提供商,也提供DNA和蛋白质序列分析软件。Ben是经常被人引用的“A Comparative Overview of C#”一文的作者,该文章所在站点被DevX评为.NET站点前十名。Ben居住在澳大利亚佩斯市,业余时间喜欢在电脑上作曲。他的电子邮件地址是:ben@genamics.com。


Ben Albahari以前是一名微软项目经理,在那里他参与开发了几个项目,包括.NET Compact Framework和ADO.NET。他是Genamics的共同创办人。他是C#和J++程序员工具的开发者,也是DNA和蛋白质序列分析软件的开发者。Ben Albahari是本书的合著者之一,这是来自O'Reilly的第一本介绍C#的书,并且他也是本书以前版本的合著者之一。
 
 
购买选项
定价:259.00元
书号:978-7-111-63134-7
出版社:机械工业出版社