C#程序设计教程 微课版 第3版
作者: 江红,余青松编著
出版时间:2018年版
丛编项: 21世纪高等学校计算机类课程创新规划教材
内容简介
本书是《C#程序设计教程》的第3版。书中基于Visual Studio 2017/.NET Framework 4.7开发和运行环境,阐述C# 7.0语言的基础知识,以及使用C# 7.0语言的实际开发应用实例,具体内容包括:C#语言基础、面向对象编程、结构、枚举、泛型、特性、语言集成查询、多线程编程技术、数值日期和字符串处理、文件和流输入输出、集合、数据库访问、Windows窗体应用程序、WPF应用程序、ASP.NET Web应用程序设计等。 本书作者结合多年的程序设计、开发及授课经验,精选大量的实例,由浅入深、循序渐进地介绍C#程序设计语言,让读者能够较为系统全面地掌握程序设计的理论和应用。每个相关知识点都配有视频讲解。本书配有实验和辅导教材《C#程序设计实验指导与习题测试(第3版)》,提供了大量的思考与实践练习,让读者从实践中巩固和应用所学的知识。 本书可作为高等学校计算机程序设计教程,同时也可作为广大程序设计开发者、爱好者的自学参考书。
目录
第1部分 C#面向对象程序设计语言的基础知识第1章 C#语言介绍 31.1 C#语言概述 3 1.1.1 C#语言简介 3 1.1.2 C#语言各版本的演变历史 4 1.1.3 C#特点和开发应用范围 41.2 C#语言的编译和运行环境 5 1.2.1 C#语言与.NET Framework 5 1.2.2 C#的运行环境 6 1.2.3 C#的开发环境 7 1.2.4 Visual Studio集成开发环境 71.3 使用记事本创建简单的C#程序 8 1.3.1 Hello World程序 8 1.3.2 代码分析 9 1.3.3 编译和运行结果 91.4 基于集成开发环境创建简单的C#程序 10 1.4.1 创建Visual C#控制台应用程序 10 1.4.2 编辑Visual C#源代码文件 11 1.4.3 编译和运行调试程序 111.5 基于“C#交互”窗口测试C#代码片段 12 1.5.1 C#交互窗口概述 12 1.5.2 C#交互窗口使用示例 121.6 C#程序的结构和书写规则 13 1.6.1 C#程序的基本结构 13 1.6.2 C#程序的书写规则 141.7 类型的声明和使用 14 1.7.1 类的声明 14 1.7.2 对象的创建和使用 151.8 命名空间 16 1.8.1 定义命名空间 16 1.8.2 访问命名空间 16 1.8.3 命名空间别名 17 1.8.4 全局命名空间 18 1.8.5 命名空间举例 19 1.8.6 外部别名 201.9 注释 21 1.9.1 单行注释 21 1.9.2 多行注释 21 1.9.3 内联注释 21 1.9.4 XML文档注释 211.10 Main方法 22 1.10.1 Main方法概述 22 1.10.2 Main方法声明 23 1.10.3 命令行参数 24 1.10.4 Main返回值 261.11 控制台输入和输出 28 1.11.1 System.Console类概述 28 1.11.2 控制台输入输出 28 1.11.3 格式化输出 29第2章 数据类型、变量和常量 312.1 标识符及其命名规则 31 2.1.1 标识符 31 2.1.2 保留关键字 31 2.1.3 命名约定 322.2 变量 32 2.2.1 变量的分类 32 2.2.2 变量的声明 32 2.2.3 变量的赋值和引用 33 2.2.4 变量的作用域 34 2.2.5 ref局部变量(C# 7.0) 352.3 常量 35 2.3.1 文本常量 35 2.3.2 用户声明常量 362.4 数据类型 36 2.4.1 类型系统 37 2.4.2 值类型 37 2.4.3 引用类型 37 2.4.4 装箱和拆箱 38 2.4.5 预定义数据类型 392.5 整型数据类型 39 2.5.1 预定义整数类型 39 2.5.2 整数类型的主要成员 40 2.5.3 整型常量 40 2.5.4 整型变量的声明和使用 412.6 浮点型数据类型 42 2.6.1 浮点类型 42 2.6.2 浮点类型的主要成员 42 2.6.3 浮点数类型常量 42 2.6.4 浮点变量的声明和使用 43 2.6.5 浮点数舍入误差 432.7 decimal数据类型 44 2.7.1 decimal类型 44 2.7.2 System.Decimal的主要成员 44 2.7.3 decimal常量 45 2.7.4 decimal变量的声明和使用 452.8 布尔数据类型 45 2.8.1 bool类型 45 2.8.2 System.Boolean的主要成员 46 2.8.3 布尔变量的声明和使用 462.9 字符数据类型 47 2.9.1 字符类型 47 2.9.2 System.Char类成员 47 2.9.3 字符常量 47 2.9.4 字符变量的声明和使用 482.10 可以为null的类型 492.11 string数据类型 50 2.11.1 字符串的表示 50 2.11.2 内插字符串 512.12 object类型 522.13 隐式类型 522.14 类型转换 53 2.14.1 隐式转换 53 2.14.2 显式转换 54 2.14.3 Convert类提供的类型转换方法 55 2.14.4 溢出检查和checked关键字 562.15 元组 57 2.15.1 元组概述 57 2.15.2 使用元组字面量创建元组对象 58 2.15.3 访问元组对象的元素 58 2.15.4 使用Tuple类创建元组对象 58 2.15.5 元组对象的解构 592.16 临时虚拟变量(Discard) 59第3章 语句、运算符和表达式 603.1 语句 60 3.1.1 C#语句的组成 60 3.1.2 C#语句的示例 61 3.1.3 C#语句的使用 643.2 运算符 65 3.2.1 算术运算符 65 3.2.2 关系和类型测试运算符 67 3.2.3 逻辑运算符 68 3.2.4 赋值运算符 70 3.2.5 字符串运算符 72 3.2.6 位运算符 72 3.2.7 条件运算符 74 3.2.8 null相关运算符 74 3.2.9 其他运算符 75 3.2.10 运算符优先级 763.3 表达式 78 3.3.1 表达式的组成 78 3.3.2 表达式的书写规则 78 3.3.3 表达式的示例 78第4章 程序流程和异常处理 804.1 顺序结构 804.2 选择结构 81 4.2.1 if语句 81 4.2.2 switch语句 88 4.2.3 模式匹配(C# 7.0) 904.3 循环结构 92 4.3.1 for循环 92 4.3.2 while循环 94 4.3.3 do…while循环 96 4.3.4 foreach循环 98 4.3.5 循环的嵌套 994.4 跳转语句 100 4.4.1 goto语句 100 4.4.2 break语句 101 4.4.3 continue语句 101 4.4.4 return语句 1024.5 异常处理 103 4.5.1 错误和异常 103 4.5.2 异常处理概述 103 4.5.3 内置的异常类 105 4.5.4 自定义异常类 105 4.5.5 引发异常 106 4.5.6 捕获处理异常try…catch…finally 108 4.5.7 异常过滤器 110第5章 数组和指针 1115.1 数组 111 5.1.1 一维数组 113 5.1.2 多维数组 115 5.1.3 交错数组 118 5.1.4 数组的基本操作和排序 121 5.1.5 作为对象的数组 1275.2 不安全代码和指针 129 5.2.1 不安全代码 129 5.2.2 指针 130第6章 类和对象 1366.1 面向对象概念 136 6.1.1 对象的定义 136 6.1.2 封装 136 6.1.3 继承 137 6.1.4 多态性 1376.2 类的声明 137 6.2.1 声明类的基本语法 138 6.2.2 类的访问修饰符 1396.3 创建和使用对象 140 6.3.1 对象的创建和使用 140 6.3.2 对象初始值设定项 1416.4 分部类 142 6.4.1 分部类的声明 142 6.4.2 分部类的应用 1446.5 System.Object类和通用方法 145 6.5.1 System.Object类 145 6.5.2 System.Object类的通用方法 145 6.5.3 对象的比较 1466.6 对象的生命周期 148 6.6.1 对象的创建 148 6.6.2 对象的使用 148 6.6.3 对象的销毁 149第7章 类成员 1507.1 类的成员概述 150 7.1.1 类成员分类 150 7.1.2 数据成员和函数成员 151 7.1.3 静态成员和实例成员 151 7.1.4 this关键字 153 7.1.5 类成员的访问修饰符 1547.2 字段和常量 155 7.2.1 字段的声明和访问 155 7.2.2 实例字段和静态字段 156 7.2.3 常量字段 156 7.2.4 只读字段 157 7.2.5 可变字段 1597.3 方法 160 7.3.1 方法的声明和调用 160 7.3.2 基于表达式声明方法(C# 6.0) 161 7.3.3 参数的传递 162 7.3.4 引用返回(C# 7.0) 167 7.3.5 方法的重载 168 7.3.6 实例方法和静态方法 169 7.3.7 分部方法 171 7.3.8 外部方法 172 7.3.9 递归方法 173 7.3.10 迭代器方法 173 7.3.11 迭代器对象 174 7.3.12 局部方法(C# 7.0) 1757.4 属性 176 7.4.1 属性的声明和访问 176 7.4.2 实例属性和静态属性 178 7.4.3 只读属性和只写属性 178 7.4.4 基于表达式的只读属性(C# 6.0) 178 7.4.5 自动实现的属性 178 7.4.6 属性初始化(C# 6.0) 179 7.4.7 基于表达式的属性访问器(C# 7.0) 1797.5 索引器 180 7.5.1 索引器的声明和访问 180 7.5.2 索引器的重载 1827.6 运算符重载 183 7.6.1 运算符重载 183 7.6.2 转换运算符 1847.7 构造函数 186 7.7.1 实例构造函数 186 7.7.2 私有构造函数 188 7.7.3 静态构造函数 189 7.7.4 构造函数的重载 1907.8 析构函数 1907.9 嵌套类 192 7.9.1 嵌套类的声明 192 7.9.2 嵌套类和包含类的关系 193 7.9.3 嵌套类的访问 195第8章 继承和多态 1978.1 继承和多态的基本概念 197 8.1.1 继承和多态 197 8.1.2 继承的类型 197 8.1.3 继承的层次关系 1988.2 继承 198 8.2.1 派生类 198 8.2.2 base关键字 199 8.2.3 构造函数的调用 200 8.2.4 类成员的继承 202 8.2.5 类成员的隐藏 204 8.2.6 虚方法和隐藏方法 205 8.2.7 虚方法和重写方法 2058.3 抽象类和抽象方法 207 8.3.1 抽象类 207 8.3.2 抽象方法 2088.4 密封类和密封方法 210 8.4.1 密封类 210 8.4.2 密封方法 2108.5 接口 211 8.5.1 接口声明 211 8.5.2 接口成员 212 8.5.3 接口实现 213 8.5.4 分部接口 215 8.5.5 接口继承 2158.6 多态 217 8.6.1 多态的概念 217 8.6.2 通过继承实现多态性 217 8.6.3 通过方法重载实现多态性 220 8.6.4 通过方法重写实现多态性 221 8.6.5 多态性综合举例 222第9章 委托和事件 2249.1 委托 224 9.1.1 委托的声明 224 9.1.2 委托的实例化和调用 225 9.1.3 匿名方法委托 228 9.1.4 多播委托 229 9.1.5 委托的异步调用 231 9.1.6 委托的兼容性 2329.2 事件 233 9.2.1 事件处理机制 233 9.2.2 事件的声明和引发 235 9.2.3 事件的订阅和取消 236 9.2.4 静态事件和实例事件 237 9.2.5 .NET Framework事件模型 237 9.2.6 综合举例:事件实现的步骤 238第10章 结构和枚举 24010.1 结构 240 10.1.1 结构概述 240 10.1.2 结构的声明 241 10.1.3 结构的调用 242 10.1.4 分部结构 243 10.1.5 结构成员 243 10.1.6 嵌套结构 24310.2 枚举 245 10.2.1 枚举概述 245 10.2.2 枚举声明 245 10.2.3 枚举的使用 247 10.2.4 Flags枚举 248 10.2.5 枚举的运算和操作 249第11章 泛型 25211.1 泛型的基本概念 252 11.1.1 引例ArrayList 252 11.1.2 引例List 253 11.1.3 泛型的概念 25311.2 泛型的定义 254 11.2.1 泛型的简单定义 254 11.2.2 开放式泛型类型和封闭式泛型类型 255 11.2.3 泛型类型参数 255 11.2.4 泛型类型参数的约束 25611.3 泛型类 257 11.3.1 泛型类的声明和使用 257 11.3.2 泛型类的继承规则 25811.4 泛型接口 259 11.4.1 泛型接口的声明和使用 259 11.4.2 泛型接口的继承和实现规则 26011.5 泛型结构 26011.6 泛型方法 261 11.6.1 泛型方法的声明和使用 261 11.6.2 泛型方法的设计规则 26211.7 泛型委托和泛型事件 263 11.7.1 泛型委托 263 11.7.2 泛型事件 264 11.7.3 Func和Action泛型委托 26511.8 default关键字 26611.9 协变和逆变 266 11.9.1 泛型类型转换 266 11.9.2 泛型委托的协变和逆变 268 11.9.3 泛型接口的协变和逆变 269第12章 特性 27112.1 特性概述 27112.2 特性的使用 27212.3 预定义通用特性类 273 12.3.1 ConditionalAttribute类 273 12.3.2 ObsoleteAttribute类 275 12.3.3 AttributeUsageAttribute类 276 12.3.4 调用方信息特性类 277 12.3.5 全局特性 27812.4 自定义特性类 27912.5 使用反射访问特性 280第13章 语言集成查询 28213.1 相关语言要素 282 13.1.1 初始值设定项 282 13.1.2 匿名类型 283 13.1.3 Lambda表达式(匿名函数) 283 13.1.4 扩展方法 28413.2 LINQ基本操作 286 13.2.1 LINQ基本概念 286 13.2.2 LINQ查询操作概述 286 13.2.3 获取数据源 287 13.2.4 创建查询 288 13.2.5 执行查询 28813.3 标准查询运算符 289 13.3.1 数据排序 289 13.3.2 数据筛选 291 13.3.3 数据投影 291 13.3.4 数据分组 291 13.3.5 联接运算 292 13.3.6 数据分区 295 13.3.7 限定运算 295 13.3.8 聚合运算 296 13.3.9 集合运算 296 13.3.10 生成运算 297 13.3.11 元素操作 297 13.3.12 串联运算 298 13.3.13 相等运算 298 13.3.14 数据类型转换 29913.4 LINQ to Objects 300 13.4.1 LINQ to Objects概述 300 13.4.2 LINQ和字符串 300 13.4.3 LINQ和文件目录 305第14章 线程、并行和异步处理 30914.1 线程处理概述 309 14.1.1 进程和线程 309 14.1.2 线程的优缺点 31014.2 创建多线程应用程序 310 14.2.1 C#应用程序主线程 310 14.2.2 创建和启动新线程 31114.3 线程和生命周期 312 14.3.1 线程和生命周期的状态 312 14.3.2 Thread类 313 14.3.3 线程的启动、终止、挂起和唤醒 314 14.3.4 休眠(暂停)线程Sleep() 315 14.3.5 线程让步Yield() 315 14.3.6 线程加入Join() 316 14.3.7 线程中断Interrupt() 316 14.3.8 线程终止/销毁Abort() 31714.4 前台线程和后台线程 31814.5 线程优先级和线程调度 31914.6 线程同步和通信 321 14.6.1 线程同步处理 321 14.6.2 使用lock语句同步代码块 321 14.6.3 使用监视器同步代码块 322 14.6.4 使用MethodImplAttribute特性实现方法同步处理 323 14.6.5 使用SynchronizationAttribute特性实现类同步处理 323 14.6.6 同步事件和等待句柄 323 14.6.7 使用Mutex同步代码块 32414.7 线程池 325 14.7.1 线程池的基本概念 325 14.7.2 创建和使用线程池 32614.8 定时器Timer 32714.9 并行处理 328 14.9.1 任务并行库 328 14.9.2 隐式创建和运行任务 328 14.9.3 显式创建和运行任务 329 14.9.4 任务的交互操作 330 14.9.5 从任务中返回值 331 14.9.6 数据并行处理 33114.10 异步处理 332 14.10.1 委托的异步调用 332 14.10.2 async和await关键字 33414.11 绑定 335 14.11.1 静态绑定和动态绑定 335 14.11.2 动态语言运行时 335 14.11.3 自定义绑定 336 14.11.4 语言绑定 336 14.11.5 dynamic类型 337第2部分 .NET Framework类库基本应用第15章 数值、日期和字符串处理 34115.1 数学函数 341 15.1.1 Math类和数学函数 341 15.1.2 Random类和随机函数 34415.2 日期和时间处理 346 15.2.1 DateTime结构 346 15.2.2 TimeSpan结构 348 15.2.3 日期格式化字符串 34915.3 字符串处理 349 15.3.1 String类 349 15.3.2 StringBuilder类 354 15.3.3 字符编码 35715.4 正则表达式 358 15.4.1 正则表达式语言 358 15.4.2 正则表达式类 361 15.4.3 正则表达式示例 361第16章 文件和流输入输出 36416.1 文件和流操作概述 36416.2 磁盘、目录和文件的基本操作 365 16.2.1 磁盘的基本操作 365 16.2.2 目录的基本操作 366 16.2.3 文件的基本操作 36716.3 文本文件的写入和读取 370 16.3.1 文本文件的写入(StreamWriter类) 370 16.3.2 文本文件的读取(StreamReader类) 37116.4 二进制文件的写入和读取 372 16.4.1 二进制文件的写入(BinaryWriter类) 372 16.4.2 二进制文件的读取(BinaryReader类) 37316.5 随机文件访问 37416.6 通用I/O流类 376第17章 集合和数据结构 37717.1 C#集合和数据结构概述 37717.2 列表类集合类型 379 17.2.1 数组列表ArrayList 379 17.2.2 列表List 380 17.2.3 双向链表LinkedList 38117.3 字典类集合类型 382 17.3.1 哈希表Hashtable 383 17.3.2 字典Dictionary 384 17.3.3 排序列表SortedList 385 17.3.4 泛型排序列表SortedList 387 17.3.5 排序字典SortedDictionary 38817.4 队列集合类型(Queue) 38917.5 堆栈集合类型(Stack) 39117.6 散列集集合类型(HashSet) 39217.7 位集合 39417.8 专用集合 395第18章 数据库访问 39618.1 ADO.NET概述 396 18.1.1 ADO.NET的基本概念 396 18.1.2 ADO.NET的结构 396 18.1.3 .NET Framework数据提供程序 397 18.1.4 ADO.NET DataSet 39818.2 使用ADO.NET连接和操作数据库 399 18.2.1 使用数据提供程序访问数据库的步骤 399 18.2.2 范例数据库Northwnd.mdf 401 18.2.3 查询数据库表数据 403 18.2.4 插入数据库表数据 404 18.2.5 更新数据库表数据 405 18.2.6 删除数据库表数据 405 18.2.7 使用存储过程访问数据库 40618.3 使用DataAdapter和DataSet访问数据库 408 18.3.1 使用DataAdapter和DataSet访问数据库的步骤 408 18.3.2 查询数据库表数据 409 18.3.3 维护数据库表数据 410第3部分 C#应用程序开发第19章 Windows窗体应用程序 41519.1 开发Windows窗体应用程序 415 19.1.1 Windows窗体应用程序概述 415 19.1.2 创建Windows窗体应用程序的一般步骤 417 19.1.3 窗体和控件概述 42019.2 常用的Windows窗体控件 420 19.2.1 标签、文本框和命令按钮 420 19.2.2 单选按钮、复选框和分组 422 19.2.3 列表选择控件 424 19.2.4 图形存储和显示控件 427 19.2.5 Timer控件 43019.3 通用对话框 431 19.3.1 OpenFileDialog对话框 432 19.3.2 SaveFileDialog对话框 432 19.3.3 通用对话框应用举例 433 19.3.4 FontDialog对话框 43519.4 菜单和工具栏 435 19.4.1 MenuStrip控件 435 19.4.2 ContextMenuStrip控件 435 19.4.3 ToolStrip控件 436 19.4.4 菜单和工具栏应用举例 43619.5 多重窗体 438 19.5.1 添加新窗体 438 19.5.2 调用其他窗体 438 19.5.3 多重窗体应用举例 43919.6 多文档界面 440 19.6.1 创建MDI父窗体 440 19.6.2 创建MDI子窗体 440 19.6.3 处理MDI子窗体 44119.7 图形绘制 441 19.7.1 GDI 图形绘制概述 441 19.7.2 绘制字符串 443 19.7.3 绘制图形 443第20章 WPF应用程序 44820.1 WPF应用程序概述 448 20.1.1 WPF简介 448 20.1.2 WPF应用程序的构成 44820.2 创建WPF应用程序 452 20.2.1 创建简单的WPF应用程序 452 20.2.2 WPF应用程序布局 453 20.2.3 WPF应用程序常用控件 45620.3 WPF应用程序与图形和多媒体 460 20.3.1 图形和多媒体概述 460 20.3.2 图形、图像、画笔和位图效果 461 20.3.3 多媒体 469 20.3.4 动画 472第21章 ASP.NET Web应用程序 47521.1 开发ASP.NET Web应用程序 475 21.1.1 ASP.NET Web应用程序概述 475 21.1.2 创建ASP.NET Web应用程序 47621.2 ASP.NET Web页面 477 21.2.1 ASP.NET Web页面概述 477 21.2.2 创建ASP.NET页面 47821.3 ASP.NET Web服务器控件 480 21.3.1 ASP.NET Web服务器控件概述 480 21.3.2 使用标准服务器控件创建Web页面 48121.4 验证服务器控件 484 21.4.1 验证服务器控件概述 484 21.4.2 使用验证服务器控件创建Web页面 48421.5 数据服务器控件 487 21.5.1 数据服务器控件概述 487 21.5.2 使用数据服务器控件创建Web页面 48721.6 使用ADO.NET连接和操作数据库 49021.7 ASP.NET页面会话状态和页面导航 491 21.7.1 ASP.NET Web应用程序上下文 491 21.7.2 ASP.NET Web应用程序事件 493 21.7.3 ASP.NET Web页面导航 49521.8 ASP.NET Web应用程序的布局和导航 496 21.8.1 ASP.NET Web母版页 496 21.8.2 ASP.NET Web导航控件 497 21.8.3 应用举例:设计ASP.NET Web站点 49821.9 ASP.NET主题和外观 502 21.9.1 ASP.NET主题和外观概述 502 21.9.2 定义主题 503 21.9.3 定义外观 503 21.9.4 定义CSS样式 503 21.9.5 在页面中使用主题 505 21.9.6 应用举例:使用ASP.NET主题和外观自定义Web站点 506第22章 综合应用案例 50922.1 多窗口文本编辑器系统设计 509 22.1.1 系统基本功能 509 22.1.2 功能模块设计 509 22.1.3 系统的实现 50922.2 ASP.NET网上书店系统的设计 514 22.2.1 系统总体设计 514 22.2.2 数据库设计 514 22.2.3 功能模块设计 515 22.2.4 系统的实现 516附录A .NET Framework和.NET Core概述 528A1 .NET Framework的概念 528 A1.1 公共语言运行时 528 A1.2 .NET Framework类库 528A2 .NET Framework的功能特点 529A3 .NET Framework环境 529A4 .NET Framework的主要版本 530A5 .NET Core 530 A5.1 .NET Core概述 530 A5.2 .NET Core组成 530 A5.3 .NET Core与.NET Framework比较 530 A5.4 .NET Core与Mono比较 531附录B C#编译器和预处理器指令 532B1 C#编译器概述 532B2 C#编译器选项 532B3 C#预处理器指令 534
附录C Visual Studio快速入门 537C1 集成开发环境(IDE)界面 537C2 创建解决方案和项目 537C3 设计器/编辑器 539C4 生成和调试工具 540C5 安装和部署工具 541C6 帮助系统 541附录D C#关键字和上下文关键字 542D1 关键字 542D2 上下文关键字 544附录E 格式化字符串 546E1 复合格式设置 546E2 复合格式字符串 546E3 数字格式字符串 547E4 标准日期和时间格式字符串 549附录F XML文档注释 553附录G ASCII码表 557附录H 程序集、应用程序域和反射 558H1 程序集 558 H1.1 程序集概述 558 H1.2 创建程序集 558H2 应用程序域 558 H2.1 应用程序域概述 558 H2.2 创建应用程序域 559H3 反射 559 H3.1 反射概述 559 H3.2 查看类型信息 560 H3.3 动态加载和使用类型 561参考文献 562