入 门 篇 第1章 .NET基础 3 1.1 .NET 3 1.2 .NET Framework 3 1.3 .NET Core 4 1.4 使用.NET Framework或.NET Core编写应用程序 5 1.4.1 CIL和JIT 5 1.4.2 程序集 6 1.5 C#语言介绍 6 1.5.1 C#语言的发展历史 6 1.5.2 C#语言的特点 6 1.5.3 C#语言的应用领域 7 1.6 小结 8 1.7 练习 8 第2章 C#初识 9 2.1 编写第一个C#程序 9 2.2 C#程序结构概述 10 2.2.1 命名空间 11 2.2.2 类 11 2.2.3 Main()方法 12 2.2.4 C#语句和注释 12 2.2.5 关键字与标识符 13 2.3 小结 14 2.4 练习 14 编程基础篇 第3章 变量、常量及运算符 17 3.1 变量是什么 17 3.2 变量的声明及初始化 17 3.2.1 声明变量 17 3.2.2 变量的初始化 18 3.3 数据类型 19 3.3.1 值类型 19 3.3.2 引用类型 27 3.4 变量的作用域 28 3.4.1 成员变量 28 3.4.2 局部变量 28 3.5 数据类型转换 29 3.5.1 隐式类型转换 29 3.5.2 显式类型转换 30 3.6 常量 31 3.6.1 const常量 31 3.6.2 readonly常量 32 3.6.3 静态常量和动态常量的对比 32 3.7 运算符 33 3.7.1 算术运算符 33 3.7.2 自增自减运算符 34 3.7.3 赋值运算符 35 3.7.4 关系运算符 36 3.7.5 逻辑运算符 37 3.7.6 位运算符 39 3.7.7 条件运算符 42 3.8 运算符优先级与结合性 43 3.9 案例1:整钱兑零 44 3.10 小结 45 3.11 练习 45 第4章 流程控制语句 47 4.1 流程控制概述 47 4.2 顺序结构 48 4.3 选择结构 48 4.3.1 if语句 48 4.3.2 分支语句的嵌套 51 4.3.3 switch语句 52 4.3.4 案例2:彩票 54 4.4 循环结构 55 4.4.1 while循环 56 4.4.2 do…while循环 56 4.4.3 for循环 57 4.4.4 for循环的变体讨论 58 4.4.5 循环的嵌套 60 4.4.6 案例3:减法表达式自动生成器 60 4.5 跳转语句 61 4.5.1 break语句 61 4.5.2 continue语句 62 4.5.3 break与continue的区别 62 4.6 案例4:显示素数 63 4.7 小结 64 4.8 练习 64 第5章 数组与字符串 67 5.1 数组概述 67 5.2 一维数组 68 5.2.1 一维数组初始化 69 5.2.2 一维数组的使用 70 5.2.3 案例5:生成一副扑克牌 70 5.3 二维数组 71 5.3.1 二维数组的创建 71 5.3.2 二维数组的初始化 71 5.3.3 二维数组的使用 72 5.3.4 案例6:数独游戏判定 72 5.4 不规则数组(交错数组) 73 5.5 C#中的Array类及数组的遍历操作 75 5.5.1 Array类 75 5.5.2 数组的遍历操作 76 5.6 字符串 76 5.6.1 字符串的声明 77 5.6.2 字符串的初始化 77 5.6.3 字符串的常用操作 78 5.7 StringBuilder类 87 5.7.1 设置StringBuilder对象的容量 88 5.7.2 修改StringBuilder字符串 88 5.8 String和StringBuilder的区别 89 5.9 小结 90 5.10 练习 90 第6章 函数 93 6.1 函数概述 93 6.2 定义和使用函数 93 6.3 返回值 95 6.4 参数 96 6.4.1 值参数 97 6.4.2 ref参数 97 6.4.3 out参数 97 6.4.4 params参数 97 6.4.5 可选参数 98 6.4.6 命名参数 98 6.5 函数重载和递归 98 6.5.1 函数重载 98 6.5.2 函数的递归 98 6.6 常用函数 101 6.6.1 数学函数 101 6.6.2 日期时间函数 101 6.7 案例7:生成随机验证码 104 6.8 小结 105 6.9 练习 105 面向对象基础篇 第7章 面向对象思想编程基础 109 7.1 面向对象思想概述 109 7.2 对象和类概述 110 7.2.1 对象 110 7.2.2 类 110 7.2.3 类与对象的关系 110 7.2.4 字段、属性和方法 111 7.2.5 对象的生命周期 111 7.3 定义类 112 7.4 定义类成员 112 7.4.1 静态成员 113 7.4.2 实例成员 113 7.4.3 类成员的访问权限 113 7.4.4 定义字段 114 7.4.5 定义方法 114 7.4.6 定义属性 115 7.4.7 定义索引器 117 7.5 对象的创建、使用及销毁 118 7.5.1 构造函数 119 7.5.2 析构函数 121 7.5.3 对象的创建和初始化 122 7.5.4 访问对象的属性和方法 124 7.5.5 对象的销毁 124 7.6 this关键字 124 7.7 案例8:以面向对象的思想生成扑克牌 125 7.8 小结 129 7.9 练习 129 第8章 继承、多态、委托与事件 131 8.1 继承 131 8.1.1 继承的实现 132 8.1.2 继承中的对象构造与析构 132 8.1.3 System.Object类 133 8.1.4 装箱与拆箱 134 8.1.5 派生类访问基类成员 135 8.2 密封方法和密封类 137 8.3 多态 137 8.3.1 方法重写 138 8.3.2 抽象方法和抽象类 139 8.3.3 接口 140 8.3.4 案例9:模拟银行存取系统案例 141 8.3.5 接口的显式实现 144 8.3.6 ICloneable接口、浅拷贝和深拷贝 144 8.3.7 实现类、抽象类与接口的继承问题 146 8.4 委托 147 8.4.1 委托的定义 147 8.4.2 委托的实例化 148 8.4.3 引用匿名方法的委托 148 8.4.4 多播委托 149 8.4.5 委托中的协变与逆变 150 8.4.6 .NET Framework中预定义的委托 150 8.5 事件 152 8.6 小结 154 8.7 练习 154 第9章 异常 155 9.1 异常概述 155 9.2 try…catch…finally 155 9.3 异常处理的流程 156 9.4 C#中的异常类 156 9.5 自定义异常类 157 9.6 小结 157 9.7 练习 157 面向对象进阶篇 第10章 泛型 161 10.1 概述 161 10.2 泛型的概念 162 10.3 泛型类 162 10.3.1 泛型类的声明与使用 162 10.3.2 可空类型 163 10.3.3 Null合并运算符 164 10.3.4 Null检查运算符 165 10.4 *泛型方法 165 10.5 *泛型接口 166 10.6 *泛型委托 167 10.7 *泛型约束 167 10.8 *泛型与继承 168 10.9 案例10:泛型矩阵 169 10.10 小结 174 10.11 练习 174 第11章 集合 175 11.1 集合概述 175 11.2 常见的集合类型 177 11.2.1 非泛型集合ArrayList 177 11.2.2 自定义强类型集合 179 11.2.3 泛型集合List<T> 179 11.2.4 泛型集合HashSet<T> 181 11.2.5 键值对集合哈希表 182 11.2.6 泛型键值对集合Dictionary<TKey, TValue> 184 11.2.7 案例11:单词出现次数统计 184 11.3 *迭代器 186 11.4 *比较 188 11.4.1 值比较 188 11.4.2 运算符重载 189 11.4.3 类型比较 190 11.4.4 IComparable和IComparer接口 192 11.5 类型转换 193 11.5.1 重载转换运算符 193 11.5.2 as运算符 194 11.6 小结 194 11.7 练习 195 第12章 *高级C#技术 196 12.1 类型推理 196 12.2 动态查找 197 12.3 Tuple和ValueTuple 198 12.3.1 Tuple 198 12.3.2 ValueTuple 200 12.4 扩展方法 202 12.5 仅限init的资源库 203 12.6 记录类型record 204 12.7 小结 205 12.8 练习 205 数据操作篇 第13章 LINQ技术 209 13.1 LINQ概述 209 13.2 匿名类型 210 13.3 查询表达式语法和查询方法语法 211 13.3.1 查询表达式语法 211 13.3.2 查询方法语法 217 13.4 延迟执行 230 13.5 案例12:商品信息分页展示 231 13.6 小结 235 13.7 练习 235 第14章 文件、流和序列化 237 14.1 文件 237 14.1.1 文件概述 237 14.1.2 System.IO命名空间 237 14.2 路径 238 14.2.1 Path类 238 14.2.2 绝对路径和相对路径 239 14.2.3 System.Environment类 239 14.3 DriveInfo类 240 14.4 文件和目录相关类 241 14.4.1 File类和Directory类 241 14.4.2 FileInfo类和DirectoryInfo类 247 14.5 流及流的操作 248 14.5.1 Stream基类 248 14.5.2 流的读取器与写入器 250 14.5.3 FileStream 255 14.5.4 MemoryStream 259 14.5.5 BufferedStream 260 14.6 *序列化与反序列化 261 14.6.1 序列化与反序列化概述 261 14.6.2 3种序列化技术及序列化规则 262 14.7 案例13:网络爬虫 264 14.8 小结 266 14.9 练习 266 第15章 数据访问技术 267 15.1 数据库概述 267 15.2 结构化查询语言 267 15.3 ADO.NET概述 268 15.4 Connection对象 270 15.4.1 Connection对象概述 270 15.4.2 连接字符串 271 15.5 Command对象 272 15.5.1 创建Command对象 273 15.5.2 执行数据库操作 273 15.6 DataReader对象 276 15.6.1 DataReader对象概述 276 15.6.2 使用DataReader对象读取查询结果 277 15.7 ADO.NET的数据访问模型 278 15.7.1 连接模式 278 15.7.2 断开连接模式 278 15.7.3 DataSet对象 279 15.7.4 DataAdapter对象 280 15.8 事务处理 283 15.9 案例14:商品销售统计 284 15.10 小结 289 15.11 练习 289 表现层技术篇 第16章 桌面编程WPF技术 293 16.1 WPF程序开发入门 293 16.1.1 WPF概述 293 16.1.2 XAML基础 294 16.1.3 依赖属性和附加属性 299 16.1.4 XAML中的事件 300 16.1.5 WPF程序的生命周期 301 16.2 布局和控件 304 16.2.1 控件模型 304 16.2.2 布局控件 307 16.2.3 通用界面控件 312 16.2.4 综合示例——基本控件的用法 317 16.2.5 用户控件 319 16.3 资源和样式 321 16.3.1 画刷 321 16.3.2 图形 323 16.3.3 资源 326 16.3.4 样式 329 16.3.5 动画 331 16.3.6 三维图形 331 16.4 数据绑定 332 16.4.1 认识数据绑定 332 16.4.2 创建数据绑定 334 16.4.3 数据转换 336 16.4.4 利用DataContext来作为共享数据源 337 16.4.5 数据模板——DataTemplate 337 16.5 命令 338 16.5.1 命令模型 338 16.5.2 自定义命令 340 16.6 案例15:天气预报 341 16.7 小结 344 16.8 练习 345 综合案例篇 第17章 综合案例——超市收银系统 349 17.1 需求分析 349 17.2 总体设计 349 17.2.1 系统目标 349 17.2.2 构建开发环境 349 17.2.3 系统功能结构 350 17.2.4 主要业务流程图 350 17.3 数据库设计 352 17.3.1 概念结构设计 352 17.3.2 数据库表结构 353 17.4 项目开发架构 356 17.4.1 三层架构 356 17.4.2 MVVM框架 357 17.5 类设计 358 17.5.1 业务实体类设计 358 17.5.2 数据访问层类设计 360 17.5.3 业务逻辑层类设计 363 17.5.4 表示层View类设计 363 17.5.5 表示层ViewModel类设计 364 17.6 系统主要模块开发与实现 365 17.6.1 登录模块 365 17.6.2 导航模块 368 17.6.3 收银模块 369 17.6.4 货品管理模块 377 17.6.5 销售统计模块 380 17.6.6 打折管理模块 384 17.6.7 人员管理模块 388 17.7 小结 391 参考文献 392 VI VII