第1章 简单的C#程序设计 1
1.1 面向对象编程的基本概念 1
1.1.1 任何事物都是一个对象 1
1.1.2 面向对象程序设计语言的三大原则 2
1.2 C#运行环境Microsoft.NET简介 3
1.2.1 Microsoft.NET平台 3
1.2.2 .NET框架 4
1.3 简单C#程序的编写与运行 5
1.3.1 使用.NET编辑器构建与运行C#程序 6
1.3.2 使用“控制台应用程序”的框架构建与运行C#程序 7
1.3.3 使用Windows应用程序框架构建与运行C#程序 10
1.4 遍历简单的C#程序代码 15
1.4.1 C#与C++程序设计的区别 15
1.4.5 命名空间与using指令 16
1.4.4 System.Console.WriteLine与Console.WriteLine方法 16
1.4.2 类与成员 16
1.4.3 Main方法 16
1.4.6 程序框架 17
1.5 C#程序设计准则 18
1.5.1 何时定义用户自己的命名空间 18
1.5.2 命名准则 18
小结 19
习题1 20
2.1 任何事物都是一个对象 21
第2章 类型系统 21
2.2 值类型与引用类型 22
2.2.1 值类型 22
2.2.2 引用类型 25
2.2.3 值类型与引用类型的根本区别 26
2.3 装箱与拆箱 27
2.3.1 装箱操作 27
2.3.2 拆箱操作 28
2.4.1 System.Object类型的公有方法 29
2.4 所有类型的根Sysrtem.Object 29
2.4.2 System.Object类型的保护方法 30
2.5 类型与别名 30
2.6 类型间的强制转换 31
2.6.1 向上隐式转型 31
2.6.2 向下显式转型 31
2.6.3 使用as实现转型 32
2.7 命名空间与using关键字 33
2.7.1 命名空间 33
2.7.2 using关键字 33
小结 35
习题2 35
第3章 控制台输入/输出 37
3.1 控制台I/O类 37
3.2 控制台输出 37
3.2.1 基本方法 37
3.2.2 字符串输出 38
3.2.3 基本的数据输出 40
3.2.4 一般的格式化输出 41
3.2.5 特殊的格式化输出 43
3.2.6 日期与时间的格式化输出 44
3.3 控制台输入 46
3.3.1 基本方法 46
3.3.2 Spliit()方法的使用 47
习题3 52
小结 52
第4章 表达式与运算符 53
4.1 定义的运算符 53
4.1.1 基本运算符 53
4.1.2 基本运算符的使用 53
4.2 运算符的优先级 55
4.2.1 C#运算符优先级的确定 55
4.2.2 左结合性与右结合性 56
4.3 C#运算符 57
4.3.1 基本的表达式运算符 57
4.2.3 实际的使用 57
4.3.2 数学运算符 60
4.3.3 关系运算符 68
4.3.4 逻辑运算符 69
4.3.5 按位运算符 71
4.3.6 简单的赋值运算符 73
小结 75
习题4 75
第5章 程序流控制 78
5.1 块语句 78
5.2 选择型语句(选择型结构) 79
5.2.1 if语句(单、双分支选择型结构) 79
5.2.2 switch语句(多分支选择型结构) 83
5.3 循环型语句(循环型结构) 87
5.3.1 while语句(前判断循环型结构) 87
5.3.2 do/while语句(后判断循环型结构) 94
5.3.3 for语句(面向问题循环型结构) 99
5.3.4 foreach语句 115
5.4 转移语句 116
5.4.1 break语句 116
5.4.2 continue语句 118
5.4.3 goto语句 121
5.4.4 return语句 122
小结 122
习题5 123
第6章 类 129
6.1 类的定义 129
6.2 类成员 130
6.3 访问修饰符 130
6.4 Main方法 131
6.4.1 命令行参数 132
6.4.2 返回值 133
6.4.3 多重Main方法 133
6.5.1 构造方法的定义与使用 134
6.5 构造方法 134
6.5.2 静态成员与实例成员 140
6.5.3 构造方法初始化 141
6.6 常量与只读域 145
6.6.1 常量 145
6.6.2 只读域 148
6.7 继承 150
6.7.1 继承的使用 150
6.7.2 多重接口 155
6.7.3 sealed类 159
小结 160
习题6 160
第7章 方法 161
7.1 方法的定义与调用 161
7.1.1 方法的定义 161
7.1.2 方法的调用 162
7.2 值方法的参数 162
7.3.1 ref方法参数 167
7.3 ref和out方法参数 167
7.3.2 out方法参数 173
7.4 方法重载 178
7.4.1 重载传递不同参数的同名方法 178
7.4.2 重载构造方法 180
7.5 可变的方法参数 183
7.6 虚拟方法 188
7.6.1 抑制方法(重构方法) 188
7.6.2 多态性 189
7.7 静态方法 191
7.7.1 静态方法的定义与调用 191
7.7.2 访问类成员 198
小结 199
习题7 199
第8章 属性、数组与索引器 202
8.1 属性 202
8.1.1 属性的定义与使用 203
8.1.2 只读属性 206
8.1.3 继承属性 211
8.1.4 属性的高级使用 214
8.2 数组 215
8.2.1 一维数组 215
8.2.2 多维数组 233
8.2.3 秩的查询 249
8.2.4 可变数组 250
8.3 索引器 256
8.3.1 索引器的定义 256
8.3.2 索引器的使用 258
小结 269
习题8 269
第9章 结构、枚举与属性信息 271
9.1 结构 271
9.1.1 结构类型的声明 271
9.1.2 结构的使用 271
9.2.1 枚举类型的声明 275
9.2 枚举 275
9.2.2 枚举的使用 276
9.3 属性信息的引入 283
9.4 属性信息的定义 284
9.5 有关属性信息的查询 285
9.5.1 类属性信息 285
9.5.2 方法属性信息 287
9.5.3 域属性信息 288
9.6.1 位置参数与命名参数 290
9.6 属性信息参数 290
9.6.2 具有命名参数的常见错误 291
9.6.3 合法的属性信息参数类型 292
9.7 AttributeUsage属性信息 292
9.7.1 属性信息目标的定义 292
9.7.2 属性信息的单一使用与多重使用 294
9.7.3 继承属性信息的规则 295
9.8 属性信息标识符 295
习题9 296
小结 296
第10章 接口 297
10.1 接口与类的区别 297
10.2 接口的声明 297
10.3 接口的实现 298
10.3.1 实现的方式 298
10.3.2 使用is运算符实现检测(查询) 316
10.3.3 使用as运算符实现检测(查询) 318
10.4.1 具有接口的名字隐藏 320
10.4 显式接口成员名的限定 320
10.4.2 避免名字二重性 322
10.5 接口与继承 325
10.6 接口的组合 328
小结 331
习题10 331
第11章 异常处理 334
11.1 异常处理概念 334
11.2.2 捕捉异常 335
11.2 基本的异常处理语法 335
11.2.1 抛出异常 335
11.2.3 重新抛出异常 338
11.2.4 用finally清理 340
11.3 System.Exception类的使用 343
11.3.1 System命名空间中常用的异常类及其使用 343
11.3.2 Exception对象的构建 345
11.3.3 StackTrace属性的使用 347
11.3.4 多重异常类型的捕捉 348
11.3.5 派生用户自己的异常类 350
11.4 具有异常处理代码的设计 351
11.4.1 具有try块的设计 351
11.4.2 具有catch块的设计 353
小结 354
习题11 354
12.1.2 代表的使用 356
12.1.1 代表的定义 356
第12章 代表与事件处理 356
12.1 代表的定义与使用的一般形式 356
12.2 使用代表作为callback方法 357
12.3 定义代表作为静态成员 359
12.4 创建代表的时机 366
12.5 代表的构成 368
12.6 用代表定义事件 373
小结 378
习题12 378
第13章 运算符重载与用户定义的转换 379
13.1 运算符重载 379
13.1.1 运算符重载的语法 379
13.1.2 可重载的运算符 382
13.2 用户定义的转换 388
13.2.1 引例 388
13.2.2 转换的语法 388
13.1.4 设计准则 388
13.1.3 运算符重载的限制 388
小结 393
习题13 393
第14章 多线程程序设计 394
14.1 多线程基础 394
14.1.1 多线程与多任务 394
14.1.2 前后关系变换 394
14.2 C#的多线程应用程序 395
14.3 用多线程工作 396
14.3.1 AppDomain 396
14.3.2 Thread类 396
14.3.3 多线程的调度 399
14.4 线程安全与同步 402
14.4.1 通过使用Monitor类的代码保护 402
14.4.2 使用具有C#lock语句的监控锁定 405
14.4.3 通过使用Mutex类的代码同步 407
14.5.1 何时使用多线程 409
14.5 线程策略 409
14.4.4 线程安全与.NET类 409
14.5.2 何时不使用多线程 410
小结 410
习题14 411
第15章 元数据查询与文件操作 412
15.1 元数据与映射 412
15.2 映射API层次结构 412
15.3 Type类 413
15.4 文件与流类 417
15.5 读文本文件 418
15.6 写文本文件 421
15.7 读二进制文件 423
15.8 写二进制文件 424
小结 425
习题15 425
习题1 426
习题参考答案 426
习题2 427
习题3 430
习题4 433
习题5 435
习题6 440
习题7 447
习题8 466
习题9 477
习题10 481
习题11 488
习题12 490
习题13 493
习题14 496
习题15 498
附录A 本书使用的符号说明 501
参考文献 502