第1章 快速认识C# /1 1.1 创建helloworld 2 1.1.1 使用文本编辑器和命令行编译器创建 2 1.1.2 使用Visual Studio Community创建 5 1.1.3 helloworld源码解读 7 1.1.4 C#脚本语言 8 1.2 C#语言特性 9 1.3 C#与.NET框架 10 1.4 多操作系统支持 12 1.4.1 在Ubuntu 14.04上安装和使用.NET Core 13 1.4.2 跨平台运行.NET Core程序 14 1.4.3 在Ubuntu 14.04上安装和使用Mono 15 1.5 本章小结 17 第2章 C#编程基础 /18 2.1 字符串操作 18 2.1.1 格式化字符串输出 19 2.1.2 $符号:字符串内插 21 2.1.3 字符串比较 22 2.1.4 修改字符串 24 2.1.5 字符编码 25 2.2 正则表达式 31 2.2.1 构造分组 33 2.2.2 反向引用 37 2.2.3 替换 38 2.3 访问文件 40 2.3.1 文件和文件夹基本操作 40 2.3.2 流处理 42 2.3.3 管道 45 2.3.4 内存映射文件 48 2.4 编码国际化 54 2.5 时间和日期 60 2.6 本章小结 63 第3章 C#面向对象编程 /64 3.1 面向对象 64 3.1.1 RESTful编程 65 3.1.2 WebSocket编程 72 3.1.3 面向对象封装 76 3.1.4 使用接口 79 3.1.5 使用继承 81 3.2 读写日志 86 3.2.1 使用Debug和Trace记录日志 86 3.2.2 使用第三方日志库记录日志 92 3.2.3 使用Microsoft.Extension.Logging记录日志 96 3.2.4 记录日志的**方法 99 3.3 依赖注入 100 3.4 配置文件 108 3.4.1 .NET框架配置文件 108 3.4.2 .NET Core配置文件 111 3.5 程序案例 117 3.6 本章小结 119 第4章 反射与动态编程 /120 4.1 反射 120 4.1.1 获取类型信息 121 4.1.2 动态加载 125 4.1.3 序列化 128 4.1.4 使用特性 132 4.1.5 版本控制 140 4.2 代码生成和动态执行 146 4.2.1 CodeDOM生成源码 147 4.2.2 Reflection.Emit 152 4.2.3 IL语言 157 4.2.4 多模块组装件 161 4.3 dynamic关键字 163 4.4 动态语言运行时 166 4.4.1 IronPython 166 4.4.2 DLR 170 4.5 本章小结 172 第5章 数据处理编程 /173 5.1 ADO.NET 175 5.1.1 使用ODBC连接数据源 178 5.1.2 在线读写数据 181 5.2 Lambda和LINQ 187 5.2.1 匿名方法和Lambda表达式 188 5.2.2 本地方法 191 5.3 LINQ 195 5.3.1 LINQ to Object 195 5.3.2 LINQ to SQL和Entity Framework Core 198 5.3.3 LINQ部分源码解读 201 5.3.4 可空引用类型 205 5.4 Entity Framework 208 5.4.1 使用EF Code First构建和映射数据库 208 5.4.2 使用EF迁移数据库 212 5.4.3 EF对关系的映射 216 5.4.4 EF的性能考量 220 5.5 本章小结 224 第6章 多线程编程 /225 6.1 多线程编程基础 225 6.1.1 创建和使用多线程 226 6.1.2 使用线程池 227 6.2 多线程同步 229 6.2.1 阻塞式等待 229 6.2.2 锁 231 6.2.3 信号 242 6.2.4 屏障 246 6.3 主动取消等待 249 6.3.1 在线程中主动响应取消请求 250 6.3.2 统一的取消任务等待操作 251 6.4 其他多线程元素 254 6.4.1 Lazy 254 6.4.2 线程本地存储 256 6.4.3 定时器 259 6.5 无锁编程 260 6.5.1 内存屏障和volatile关键字 260 6.5.2 使用无锁编程 261 6.6 本章小结 263 第7章 并行编程 /264 7.1 并行编程基础 264 7.1.1 使用Task类型实现并行 264 7.1.2 使用Parallel.For实现并行 268 7.2 硬件特性 270 7.2.1 内存访问顺序 271 7.2.2 伪共享 272 7.3 基于数据并行 275 7.3.1 Parallel.For和Parallel.ForEach 275 7.3.2 跳出循环 278 7.4 基于任务的并行 280 7.4.1 网络异步编程的适用场景 280 7.4.2 使用连续任务 281 7.4.3 Thread.Sleep和Task.Delay的区别 284 7.5 async和await关键字 286 7.5.1 使用async和await异步编程 286 7.5.2 使用状态机实现async方法 288 7.5.3 async方法实现机制 292 7.5.4 扩展async方法 296 7.5.5 async方法执行上下文 296 7.6 函数式编程 298 7.6.1 函数式编程简介 298 7.6.2 高阶方法 299 7.6.3 偏函数应用 300 7.6.4 柯里化方法 301 7.6.5 数据封装 302 7.6.6 错误处理 304 7.6.7 模式匹配 305 7.7 本章小结 308 第8章 分布式编程 /309 8.1 C#对分布式编程的支持 309 8.1.1 Web服务技术 310 8.1.2 Remoting技术 311 8.1.3 RESTful API 312 8.1.4 gRPC 313 8.2 分布式系统举例 323 8.2.1 消息队列 324 8.2.2 ZeroMQ 325 8.2.3 系统架构 334 8.2.4 交易所各模块 335 8.2.5 测试交易所系统 340 8.3 本章小结 347