书籍详情
C# 3.0完全参考手册
作者:(美)希尔特 著,赵利通 译
出版社:清华大学出版社
出版时间:2010-03-01
ISBN:9787302220725
定价:¥128.00
购买这本书可以去
内容简介
《C# 3.0完全参考手册》通过支持LINQ(Language Integrated Query,语言集成查询),C# 3.0为C#编程带来了彻底的变革,全球最优秀的畅销书作者Herbert Schildt已经更新并扩展了他的经典编程参考手册以详细介绍C# 3.0。通过使用精心编写的说明内容、权威人士的提示信息以及数百个示例,《C# 3.0完全参考手册》深入介绍了C#的所有方面,包括它的关键字、语法和核心库。另外,《C# 3.0完全参考手册》详细介绍了C# 3.0的新增功能,如LINQ、拉姆达表达式、隐式类型的变量和匿名类型。这本综合性指南采用了Herbert一贯的写作风格,即条理清晰,语言精练,而且重点突出,是每个C#程序员不可或缺的参考资源。无论您是编程初学者还是老练的专业编程人员,都可以在这本权威书籍中找到关于所有C#问题的答案。
作者简介
希尔特(Herbert Schildt),是世界顶级程序设计大师,全球顶尖编程图书作者之一。他是C、C++、Java和C#编程语言的权威,也是Windows编程方面的专家。拥有伊利诺斯大学的计算机科学硕士学位。他的编程书籍在世界范围内的销量已经超过3000000册,并被翻译成多种语言流传于世。
目录
第Ⅰ部分 C# 语 言
第1章 C#的起源 3
1.1 C#的族谱 3
1.1.1 C语言:现代程序设计的开端 3
1.1.2 OOP和C++语言的创建 4
1.1.3 Internet和Java的出现 4
1.1.4 C#的创建 5
1.1.5 C#的发展 6
1.2 C#如何与.NET Framework相关 7
1.3 公共语言运行库的工作原理 7
1.4 托管和非托管代码 8
第2章 C#概述 9
2.1 面向对象程序设计 9
2.1.1 封装 10
2.1.2 多态性 10
2.1.3 继承 11
2.2 简单示例 11
2.2.1 C#命令行编译器csc.exe 12
2.2.2 使用Visual Studio IDE 13
2.2.3 逐行分析第一个示例程序 17
2.3 处理语法错误 18
2.4 改写示例一 19
2.5 简单示例二 20
2.6 另一种数据类型 21
2.7 两种控制语句 23
2.7.1 if语句 23
2.7.2 for循环 25
2.8 代码块 26
2.9 分号、定位和缩进 28
2.10 C#语言的关键字 28
2.11 标识符 29
2.12 .NET Framework类库 30
第3章 数据类型、直接量和变量 31
3.1 数据类型的重要性 31
3.2 C#的数据类型 31
3.3 整数类型 32
3.4 浮点类型 34
3.5 decimal类型 36
3.6 字符类型 37
3.7 布尔类型 38
3.8 自定义输出格式 39
3.9 直接量 42
3.9.1 十六进制直接量 42
3.9.2 字符转义序列 43
3.9.3 字符串直接量 43
3.10 变量 45
3.10.1 初始化变量 45
3.10.2 动态初始化变量 46
3.10.3 隐式类型的变量 46
3.11 变量的作用域和生命周期 48
3.12 类型转换 50
3.12.1 自动类型转换 50
3.12.2 强制转换不兼容的类型 51
3.13 表达式中的类型转换 54
第4章 运算符 59
4.1 算术运算符 59
4.2 关系和逻辑运算符 63
4.3 赋值运算符 67
4.4 按位运算符 68
4.4.1 按位与、或、异或和取反运算符 69
4.4.2 移位运算符 75
4.4.3 按位复合赋值 77
4.5 问号(?)运算符 78
4.6 空白符和圆括号 79
4.7 运算符优先级 79
第5章 程序控制语句 81
5.1 if语句 81
5.1.1 if语句嵌套 82
5.1.2 if-else-if阶梯结构 83
5.2 switch语句 84
5.3 for循环 88
5.4 while循环 96
5.5 do-while循环 97
5.6 foreach循环 98
5.7 使用break语句退出循环 98
5.8 使用continue语句 101
5.9 goto语句 102
第6章 类和对象 105
6.1 类基础 105
6.1.1 类的基本形式 105
6.1.2 定义类 106
6.2 如何创建对象 110
6.3 引用类型的变量和赋值 111
6.4 方法 111
6.4.1 给Building类添加方法 112
6.4.2 从方法返回 114
6.4.3 返回值 115
6.4.4 使用参数 117
6.4.5 给Building类添加带参数的方法 119
6.4.6 避免产生不可到达的代码 121
6.5 构造函数 121
6.5.1 带参数的构造函数 122
6.5.2 给Building类添加构造函数 123
6.6 new运算符 124
6.7 垃圾回收和析构函数 125
6.8 this关键字 127
第7章 数组和字符串 131
7.1 数组 131
7.2 多维数组 135
7.2.1 二维数组 135
7.2.2 三维或更多维的数组 136
7.2.3 初始化多维数组 137
7.3 交错数组 138
7.4 数组引用赋值 141
7.5 Length属性 142
7.6 隐式类型的数组 145
7.7 foreach循环 147
7.8 字符串 150
7.8.1 构造字符串 151
7.8.2 操作字符串 151
7.8.3 字符串数组 154
7.8.4 字符串是不可变的 156
7.8.5 在switch语句中使用字符串 157
第8章 方法和类 159
8.1 控制对类成员的访问 159
8.1.1 C#的访问修饰符 159
8.1.2 公有访问和私有访问的应用 161
8.1.3 访问控制:案例分析 161
8.2 给方法传递引用 166
8.3 使用ref和out参数 170
8.3.1 使用ref关键字 170
8.3.2 使用out关键字 172
8.3.3 对引用参数使用ref和out 174
8.4 使用数量可变的参数 176
8.5 返回对象 178
8.6 方法重载 182
8.7 构造函数重载 187
8.8 对象初始化器 193
8.9 Main()方法 194
8.9.1 从Main()返回值 194
8.9.2 给Main()传递参数 194
8.10 递归 196
8.11 理解static关键字 199
8.12 静态类 204
第9章 运算符重载 207
9.1 运算符重载基础 207
9.1.1 重载二元运算符 208
9.1.2 重载一元运算符 210
9.2 处理针对C#内置类型的运算 214
9.3 重载关系运算符 219
9.4 重载true和false 221
9.5 重载逻辑运算符 223
9.5.1 一种重载逻辑运算符的简单方法 223
9.5.2 使用短路运算符 226
9.6 转换运算符 230
9.7 运算符重载的注意事项 234
9.8 运算符重载的另一个示例 235
第10章 索引器和属性 239
10.1 索引器 239
10.1.1 创建一维索引器 239
10.1.2 索引器重载 243
10.1.3 索引器不需要一个潜在的数组 245
10.1.4 多维索引器 246
10.2 属性 249
10.2.1 自动实现属性 254
10.2.2 对属性使用对象初始化器 254
10.2.3 属性限制 255
10.3 对存取器使用访问修饰符 255
10.4 使用索引器和属性 258
第11章 继承 265
11.1 继承基础 265
11.2 成员访问和继承 268
11.3 构造函数和继承 272
11.4 继承和名称隐藏 279
11.5 创建多级层次结构 282
11.6 构造函数的调用 285
11.7 基类引用和派生对象 286
11.8 虚方法和重写 290
11.8.1 重写方法的原因 294
11.8.2 应用虚方法 294
11.9 使用抽象类 298
11.10 使用sealed来阻止继承 302
11.11 object类 302
11.11.1 装箱和拆箱 304
11.11.2 object是否是通用数据类型 306
第12章 接口、结构和枚举 309
12.1 接口 309
12.2 使用接口类型的引用 314
12.3 接口属性 317
12.4 接口索引器 318
12.5 接口的继承 320
12.6 接口继承引起的名称隐藏 321
12.7 显式实现 321
12.8 在接口和抽象类之间选择 324
12.9 .NET标准接口 324
12.10 结构 325
12.11 枚举 330
12.11.1 初始化一个枚举 332
12.11.2 指定枚举的基本类型 332
12.11.3 使用枚举 332
第13章 异常处理 335
13.1 System.Exception类 335
13.2 异常处理的基础 335
13.2.1 使用try和catch 336
13.2.2 一个简单的异常示例 336
13.2.3 另一个异常示例 338
13.3 未捕获异常的后果 339
13.4 使用多个catch子句 341
13.5 捕获所有的异常 342
13.6 嵌套try块 344
13.7 抛出异常 345
13.8 finally语句 347
13.9 进一步分析异常类 349
13.10 派生异常类 352
13.11 捕获派生类异常 356
13.12 checked语句和unchecked语句 357
第14章 I/O系统 361
14.1 C#的I/O依赖于数据流 361
14.1.1 字节数据流和字符数据流 361
14.1.2 预定义数据流 361
14.1.3 数据流类 362
14.1.4 Stream类 362
14.1.5 字节数据流类 363
14.1.6 字符数据流封装类 363
14.1.7 二进制数据流 365
14.2 控制台I/O 365
14.2.1 读取控制台输入 365
14.2.2 使用ReadKey()方法 367
14.2.3 写入控制台输出 369
14.3 文件数据流和面向字节的文件I/O操作 370
14.3.1 打开和关闭文件 370
14.3.2 从FileStream中读取字节 372
14.3.3 写入文件 373
14.3.4 使用FileStream复制文件 374
14.4 基于字符的文件I/O操作 376
14.4.1 使用StreamWriter类 376
14.4.2 StreamReader类 378
14.5 重定向标准数据流 380
14.6 读取和写入二进制数据 382
14.6.1 BinaryWriter 382
14.6.2 BinaryReader 382
14.6.3 二进制I/O操作的程序示例 384
14.7 随机访问文件 388
14.8 使用MemoryStream 391
14.9 StringReader和StringWriter 393
14.10 把数值型字符串转换为内部表示格式 394
第15章 委托、事件和拉姆达表达式 399
15.1 委托 399
15.1.1 委托的方法组转换 402
15.1.2 使用实例方法作为委托 402
15.1.3 多播委托 404
15.1.4 协变和逆变 406
15.1.5 System.Delegate 408
15.1.6 使用委托的原因 408
15.2 匿名函数 408
15.3 匿名方法 408
15.3.1 给匿名方法传递参数 409
15.3.2 从匿名方法中返回一个值 410
15.3.3 在匿名方法中使用外部变量 411
15.4 拉姆达表达式 413
15.4.1 拉姆达运算符 413
15.4.2 表达式拉姆达 413
15.4.3 语句拉姆达 416
15.5 事件 418
15.5.1 多播委托事件的示例 420
15.5.2 作为事件处理程序的实例方法和静态方法的区别 422
15.5.3 使用事件存取器 424
15.5.4 事件的其他特性 429
15.6 对事件使用匿名方法和拉姆达表达式 429
15.7 .NET事件的规则 430
15.8 事件的应用:案例分析 433
第16章 名称空间、预处理器和程序集 437
16.1 名称空间 437
16.1.1 名称空间的声明 437
16.1.2 名称空间可以避免名称冲突 440
16.1.3 using命令 441
16.1.4 using命令的另一种形式 443
16.1.5 名称空间的合成 445
16.1.6 嵌套名称空间 446
16.1.7 全局名称空间 448
16.1.8 使用名称空间别名限定符(::) 448
16.2 预处理器 452
16.2.1 #define 452
16.2.2 #if和#endif 453
16.2.3 #else和#elif 454
16.2.4 #undef 456
16.2.5 #error 456
16.2.6 #warning 457
16.2.7 #line 457
16.2.8 #region和#endregion 457
16.2.9 #pragma 457
16.3 程序集和internal访问修饰符 458
第17章 运行时类型标识、反射和特性 461
17.1 运行时类型标识 461
17.1.1 使用is运算符测试类型 461
17.1.2 使用as运算符 462
17.1.3 使用typeof运算符 464
17.2 反射 465
17.3 使用反射 467
17.3.1 获取方法的相关信息 467
17.3.2 GetMethods()的另一种形式 470
17.3.3 使用反射调用方法 471
17.3.4 获取Type对象的构造函数 474
17.3.5 从程序集获得类型 478
17.3.6 全自动类型查询 483
17.4 特性 486
17.4.1 特性基础 486
17.4.2 创建特性 486
17.4.3 连接特性 487
17.4.4 获取对象的特性 487
17.4.5 位置参数和命名参数 489
17.5 三个内置特性 493
17.5.1 AttributeUsage特性 493
17.5.2 Conditional特性 494
17.5.3 Obsolete特性 495
第18章 泛型 497
18.1 泛型概念 497
18.2 一个简单的泛型示例 498
18.2.1 泛型类型因类型参数的不同而不同 501
18.2.2 泛型如何实现类型安全 501
18.3 使用两个类型参数的泛型类 504
18.4 泛型类的通用形式 505
18.5 类型约束 505
18.5.1 基类约束 506
18.5.2 接口约束 514
18.5.3 new()构造函数约束 518
18.5.4 引用类型和值类型约束 519
18.5.5 使用约束建立两个类型参数之间的关系 522
18.5.6 使用多重约束 523
18.6 创建类型参数的默认值 524
18.7 泛型结构 525
18.8 创建泛型方法 526
18.8.1 调用泛型方法时显式地指定类型实参 529
18.8.2 为泛型方法指定约束 529
18.9 泛型委托 529
18.10 泛型接口 532
18.11 比较同一类型参数的实例 536
18.12 泛型类的层次结构 539
18.12.1 使用泛型基类 539
18.12.2 泛型派生类 541
18.13 重写泛型类中的虚方法 542
18.14 重载带类型参数的方法 544
18.15 泛型类型的实例化 545
18.16 使用泛型时的一些局限 546
18.17 小结 546
第19章 LINQ 547
19.1 LINQ的定义 547
19.2 LINQ的基础知识 548
19.2.1 简单查询 548
19.2.2 查询可以多次执行 550
19.2.3 查询中的数据类型的关联方式 551
19.2.4 查询的一般形式 552
19.3 使用where子句筛选值 552
19.4 使用orderby子句排序结果 554
19.5 深入讨论select子句 558
19.6 使用嵌套的from子句 561
19.7 使用group子句分组结果 562
19.8 使用into子句创建继续 564
19.9 在查询中使用let子句创建变量 566
19.10 使用join子句连接两个序列 567
19.11 匿名类型 570
19.12 创建组连接 572
19.13 查询方法 575
19.13.1 基本查询方法 575
19.13.2 使用查询方法创建查询 576
19.13.3 查询语法与查询方法的对比 578
19.13.4 更多与查询相关的扩展方法 578
19.14 延期执行查询和立即执行查询 581
19.15 表达式树 582
19.16 扩展方法 583
第20章 不安全代码、指针、空类型和其他主题 587
20.1 不安全代码 587
20.1.1 指针基础 588
20.1.2 使用unsafe关键字 589
20.1.3 使用fixed修饰符 590
20.1.4 通过指针访问结构成员 591
20.1.5 指针运算 591
20.1.6 指针的比较 593
20.1.7 指针和数组 593
20.1.8 指针和字符串 595
20.1.9 多重间接寻址 596
20.1.10 指针数组 597
20.1.11 sizeof 597
20.1.12 stackalloc 597
20.1.13 创建固定大小的缓冲区 598
20.2 空类型 599
20.2.1 空类型基础 600
20.2.2 表达式中的空对象 601
20.2.3 ??运算符 602
20.2.4 在空对象上使用关系和逻辑运算符 603
20.3 部分类型 604
20.4 部分方法 605
20.5 友元程序集 606
20.6 其他关键字 607
20.6.1 lock关键字 607
20.6.2 readonly关键字 607
20.6.3 const和volatile关键字 608
20.6.4 using语句 608
20.7 extern关键字 609
20.7.1 声明extern方法 610
20.7.2 声明extern程序集别名 611
第Ⅱ部分 C#类库研究
第21章 研究System名称空间 615
21.1 System的成员 615
21.2 Math类 617
21.3 与内置值类型对应的.NET结构 622
21.3.1 整型结构 623
21.3.2 浮点类型结构 625
21.3.3 Decimal结构 628
21.3.4 Char结构 633
21.3.5 Boolean结构 638
21.4 Array类 639
21.4.1 排序和搜索数组 646
21.4.2 反转数组 649
21.4.3 复制数组 649
21.4.4 使用谓词 650
21.4.5 使用Action委托 652
21.5 BitConverter类 653
21.6 用Random产生随机数 655
21.7 内存管理和GC类 656
21.8 Object类 657
21.9 IComparable和IComparable[T]接口 657
21.10 IEquatable[T]接口 658
21.11 IConvertible接口 658
21.12 ICloneable接口 658
21.13 IFormatProvider接口和
IFormattable接口 660
第22章 字符串和格式化 663
22.1 C#中的字符串 663
22.2 String类 663
22.2.1 字符串构造函数 664
22.2.2 String类的字段、索引器和属性 664
22.2.3 字符串运算符 665
22.2.4 字符串方法 665
22.2.5 填充和剪裁字符串 679
22.2.6 插入、删除和替换 681
22.2.7 改变字母大小写 682
22.2.8 使用Substring()方法 682
22.2.9 字符串扩展方法 683
22.3 格式化类型 683
22.3.1 格式化类型概述 683
22.3.2 数值型数据的格式说明符 684
22.3.3 理解参数编号 686
22.4 使用String.Format()和
ToString()格式化数据 686
22.4.1 使用String.Format()格式化值 686
22.4.2 使用ToString()格式化数据 689
22.5 自定义数字格式 690
22.6 格式化日期和时间 693
22.7 格式化枚举 697
第23章 多线程程序设计 701
23.1 多线程基础 701
23.2 Thread类 702
23.2.1 创建和启动线程 702
23.2.2 一些简单的改进 705
23.2.3 创建多个线程 706
23.3 确定线程结束的时间 708
23.4 为线程传递参数 710
23.5 IsBackground属性 712
23.6 线程优先级 713
23.7 同步 715
23.7.1 实现同步的另一种方式 719
23.7.2 Monitor类和锁 720
23.8 使用Wait()、Pulse()和PulseAll()实现线程通信 721
23.8.1 Wait()和Pulse()的示例 721
23.8.2 死锁和竞争条件 725
23.9 使用MethodImplAttribute属性 725
23.10 使用互斥锁和信号量 727
23.10.1 互斥锁 727
23.10.2 信号量 731
23.11 使用事件 734
23.12 Interlocked类 736
23.13 终止线程 737
23.13.1 Abort()的另一种形式 739
23.13.2 取消Abort() 740
23.14 挂起和恢复线程 742
23.15 判断线程的状态 742
23.16 使用主线程 742
23.17 多线程编程提示 744
23.18 开启独立任务 744
第24章 集合、枚举器和迭代器 747
24.1 集合概述 747
24.2 非泛型集合 748
24.2.1 非泛型接口 748
24.2.2 DictionaryEntry结构 752
24.2.3 非泛型集合类 753
24.3 使用BitArray类存储位 768
24.4 专用集合 770
24.5 泛型集合 771
24.5.1 泛型接口 771
24.5.2 KeyValuePair[TK,TV]结构 775
24.5.3 泛型集合类 775
24.6 在集合中存储用户自定义的类 793
24.7 实现IComparable接口 795
24.7.1 为非泛型集合实现IComparable接口 796
24.7.2 为泛型集合实现IComparable[T]接口 797
24.8 使用IComparer接口 799
24.8.1 使用非泛型的IComparer 799
24.8.2 使用泛型的IComparer[T] 800
24.9 通过枚举器访问集合 802
24.9.1 使用枚举器 802
24.9.2 使用IDictionaryEnmerator 803
24.10 实现IEnumerable和IEnumerator接口 805
24.11 迭代器 806
24.11.1 停用迭代器 808
24.11.2 使用多个yield指令 809
24.11.3 创建命名迭代器 810
24.11.4 创建泛型迭代器 811
24.12 集合初始化器 812
第25章 通过Internet连网 813
25.1 System.Net的成员 813
25.2 统一资源标识符 815
25.3 Internet访问基础 815
25.3.1 WebRequest类 816
25.3.2 WebResponse类 818
25.3.3 HttpWebRequest类和HttpWebResponse类 819
25.3.4 第一个简单的示例 819
25.4 处理网络错误 821
25.4.1 Create()产生的异常 822
25.4.2 GetResponse()产生的异常 822
25.4.3 GetResponseStream()产生的异常 822
25.4.4 使用异常处理 822
25.5 Uri类 824
25.6 访问附加的HTTP响应信息 825
25.6.1 访问报头 826
25.6.2 访问Cookie 827
25.6.3 使用LastModified属性 829
25.7 MiniCrawler:案例分析 829
25.8 使用WebClient 833
第26章 使用System.Windows.Forms创建基于窗体的Windows应用程序 837
26.1 Windows程序设计简史 837
26.2 编写基于窗体的Windows应用程序的两种方式 838
26.3 Windows与用户交互操作的方法 838
26.4 Windows窗体 839
26.5 基于窗体的Windows框架程序 839
26.6 添加按钮 841
26.6.1 按钮概述 842
26.6.2 给窗体添加按钮 842
26.6.3 简单的按钮示例 842
26.7 消息处理 843
26.8 使用消息框 845
26.9 添加菜单 848
26.9.1 创建传统样式的主菜单 848
26.9.2 使用MenuStrip创建新式菜单 852
附录A 文档注释快速参考 857
第1章 C#的起源 3
1.1 C#的族谱 3
1.1.1 C语言:现代程序设计的开端 3
1.1.2 OOP和C++语言的创建 4
1.1.3 Internet和Java的出现 4
1.1.4 C#的创建 5
1.1.5 C#的发展 6
1.2 C#如何与.NET Framework相关 7
1.3 公共语言运行库的工作原理 7
1.4 托管和非托管代码 8
第2章 C#概述 9
2.1 面向对象程序设计 9
2.1.1 封装 10
2.1.2 多态性 10
2.1.3 继承 11
2.2 简单示例 11
2.2.1 C#命令行编译器csc.exe 12
2.2.2 使用Visual Studio IDE 13
2.2.3 逐行分析第一个示例程序 17
2.3 处理语法错误 18
2.4 改写示例一 19
2.5 简单示例二 20
2.6 另一种数据类型 21
2.7 两种控制语句 23
2.7.1 if语句 23
2.7.2 for循环 25
2.8 代码块 26
2.9 分号、定位和缩进 28
2.10 C#语言的关键字 28
2.11 标识符 29
2.12 .NET Framework类库 30
第3章 数据类型、直接量和变量 31
3.1 数据类型的重要性 31
3.2 C#的数据类型 31
3.3 整数类型 32
3.4 浮点类型 34
3.5 decimal类型 36
3.6 字符类型 37
3.7 布尔类型 38
3.8 自定义输出格式 39
3.9 直接量 42
3.9.1 十六进制直接量 42
3.9.2 字符转义序列 43
3.9.3 字符串直接量 43
3.10 变量 45
3.10.1 初始化变量 45
3.10.2 动态初始化变量 46
3.10.3 隐式类型的变量 46
3.11 变量的作用域和生命周期 48
3.12 类型转换 50
3.12.1 自动类型转换 50
3.12.2 强制转换不兼容的类型 51
3.13 表达式中的类型转换 54
第4章 运算符 59
4.1 算术运算符 59
4.2 关系和逻辑运算符 63
4.3 赋值运算符 67
4.4 按位运算符 68
4.4.1 按位与、或、异或和取反运算符 69
4.4.2 移位运算符 75
4.4.3 按位复合赋值 77
4.5 问号(?)运算符 78
4.6 空白符和圆括号 79
4.7 运算符优先级 79
第5章 程序控制语句 81
5.1 if语句 81
5.1.1 if语句嵌套 82
5.1.2 if-else-if阶梯结构 83
5.2 switch语句 84
5.3 for循环 88
5.4 while循环 96
5.5 do-while循环 97
5.6 foreach循环 98
5.7 使用break语句退出循环 98
5.8 使用continue语句 101
5.9 goto语句 102
第6章 类和对象 105
6.1 类基础 105
6.1.1 类的基本形式 105
6.1.2 定义类 106
6.2 如何创建对象 110
6.3 引用类型的变量和赋值 111
6.4 方法 111
6.4.1 给Building类添加方法 112
6.4.2 从方法返回 114
6.4.3 返回值 115
6.4.4 使用参数 117
6.4.5 给Building类添加带参数的方法 119
6.4.6 避免产生不可到达的代码 121
6.5 构造函数 121
6.5.1 带参数的构造函数 122
6.5.2 给Building类添加构造函数 123
6.6 new运算符 124
6.7 垃圾回收和析构函数 125
6.8 this关键字 127
第7章 数组和字符串 131
7.1 数组 131
7.2 多维数组 135
7.2.1 二维数组 135
7.2.2 三维或更多维的数组 136
7.2.3 初始化多维数组 137
7.3 交错数组 138
7.4 数组引用赋值 141
7.5 Length属性 142
7.6 隐式类型的数组 145
7.7 foreach循环 147
7.8 字符串 150
7.8.1 构造字符串 151
7.8.2 操作字符串 151
7.8.3 字符串数组 154
7.8.4 字符串是不可变的 156
7.8.5 在switch语句中使用字符串 157
第8章 方法和类 159
8.1 控制对类成员的访问 159
8.1.1 C#的访问修饰符 159
8.1.2 公有访问和私有访问的应用 161
8.1.3 访问控制:案例分析 161
8.2 给方法传递引用 166
8.3 使用ref和out参数 170
8.3.1 使用ref关键字 170
8.3.2 使用out关键字 172
8.3.3 对引用参数使用ref和out 174
8.4 使用数量可变的参数 176
8.5 返回对象 178
8.6 方法重载 182
8.7 构造函数重载 187
8.8 对象初始化器 193
8.9 Main()方法 194
8.9.1 从Main()返回值 194
8.9.2 给Main()传递参数 194
8.10 递归 196
8.11 理解static关键字 199
8.12 静态类 204
第9章 运算符重载 207
9.1 运算符重载基础 207
9.1.1 重载二元运算符 208
9.1.2 重载一元运算符 210
9.2 处理针对C#内置类型的运算 214
9.3 重载关系运算符 219
9.4 重载true和false 221
9.5 重载逻辑运算符 223
9.5.1 一种重载逻辑运算符的简单方法 223
9.5.2 使用短路运算符 226
9.6 转换运算符 230
9.7 运算符重载的注意事项 234
9.8 运算符重载的另一个示例 235
第10章 索引器和属性 239
10.1 索引器 239
10.1.1 创建一维索引器 239
10.1.2 索引器重载 243
10.1.3 索引器不需要一个潜在的数组 245
10.1.4 多维索引器 246
10.2 属性 249
10.2.1 自动实现属性 254
10.2.2 对属性使用对象初始化器 254
10.2.3 属性限制 255
10.3 对存取器使用访问修饰符 255
10.4 使用索引器和属性 258
第11章 继承 265
11.1 继承基础 265
11.2 成员访问和继承 268
11.3 构造函数和继承 272
11.4 继承和名称隐藏 279
11.5 创建多级层次结构 282
11.6 构造函数的调用 285
11.7 基类引用和派生对象 286
11.8 虚方法和重写 290
11.8.1 重写方法的原因 294
11.8.2 应用虚方法 294
11.9 使用抽象类 298
11.10 使用sealed来阻止继承 302
11.11 object类 302
11.11.1 装箱和拆箱 304
11.11.2 object是否是通用数据类型 306
第12章 接口、结构和枚举 309
12.1 接口 309
12.2 使用接口类型的引用 314
12.3 接口属性 317
12.4 接口索引器 318
12.5 接口的继承 320
12.6 接口继承引起的名称隐藏 321
12.7 显式实现 321
12.8 在接口和抽象类之间选择 324
12.9 .NET标准接口 324
12.10 结构 325
12.11 枚举 330
12.11.1 初始化一个枚举 332
12.11.2 指定枚举的基本类型 332
12.11.3 使用枚举 332
第13章 异常处理 335
13.1 System.Exception类 335
13.2 异常处理的基础 335
13.2.1 使用try和catch 336
13.2.2 一个简单的异常示例 336
13.2.3 另一个异常示例 338
13.3 未捕获异常的后果 339
13.4 使用多个catch子句 341
13.5 捕获所有的异常 342
13.6 嵌套try块 344
13.7 抛出异常 345
13.8 finally语句 347
13.9 进一步分析异常类 349
13.10 派生异常类 352
13.11 捕获派生类异常 356
13.12 checked语句和unchecked语句 357
第14章 I/O系统 361
14.1 C#的I/O依赖于数据流 361
14.1.1 字节数据流和字符数据流 361
14.1.2 预定义数据流 361
14.1.3 数据流类 362
14.1.4 Stream类 362
14.1.5 字节数据流类 363
14.1.6 字符数据流封装类 363
14.1.7 二进制数据流 365
14.2 控制台I/O 365
14.2.1 读取控制台输入 365
14.2.2 使用ReadKey()方法 367
14.2.3 写入控制台输出 369
14.3 文件数据流和面向字节的文件I/O操作 370
14.3.1 打开和关闭文件 370
14.3.2 从FileStream中读取字节 372
14.3.3 写入文件 373
14.3.4 使用FileStream复制文件 374
14.4 基于字符的文件I/O操作 376
14.4.1 使用StreamWriter类 376
14.4.2 StreamReader类 378
14.5 重定向标准数据流 380
14.6 读取和写入二进制数据 382
14.6.1 BinaryWriter 382
14.6.2 BinaryReader 382
14.6.3 二进制I/O操作的程序示例 384
14.7 随机访问文件 388
14.8 使用MemoryStream 391
14.9 StringReader和StringWriter 393
14.10 把数值型字符串转换为内部表示格式 394
第15章 委托、事件和拉姆达表达式 399
15.1 委托 399
15.1.1 委托的方法组转换 402
15.1.2 使用实例方法作为委托 402
15.1.3 多播委托 404
15.1.4 协变和逆变 406
15.1.5 System.Delegate 408
15.1.6 使用委托的原因 408
15.2 匿名函数 408
15.3 匿名方法 408
15.3.1 给匿名方法传递参数 409
15.3.2 从匿名方法中返回一个值 410
15.3.3 在匿名方法中使用外部变量 411
15.4 拉姆达表达式 413
15.4.1 拉姆达运算符 413
15.4.2 表达式拉姆达 413
15.4.3 语句拉姆达 416
15.5 事件 418
15.5.1 多播委托事件的示例 420
15.5.2 作为事件处理程序的实例方法和静态方法的区别 422
15.5.3 使用事件存取器 424
15.5.4 事件的其他特性 429
15.6 对事件使用匿名方法和拉姆达表达式 429
15.7 .NET事件的规则 430
15.8 事件的应用:案例分析 433
第16章 名称空间、预处理器和程序集 437
16.1 名称空间 437
16.1.1 名称空间的声明 437
16.1.2 名称空间可以避免名称冲突 440
16.1.3 using命令 441
16.1.4 using命令的另一种形式 443
16.1.5 名称空间的合成 445
16.1.6 嵌套名称空间 446
16.1.7 全局名称空间 448
16.1.8 使用名称空间别名限定符(::) 448
16.2 预处理器 452
16.2.1 #define 452
16.2.2 #if和#endif 453
16.2.3 #else和#elif 454
16.2.4 #undef 456
16.2.5 #error 456
16.2.6 #warning 457
16.2.7 #line 457
16.2.8 #region和#endregion 457
16.2.9 #pragma 457
16.3 程序集和internal访问修饰符 458
第17章 运行时类型标识、反射和特性 461
17.1 运行时类型标识 461
17.1.1 使用is运算符测试类型 461
17.1.2 使用as运算符 462
17.1.3 使用typeof运算符 464
17.2 反射 465
17.3 使用反射 467
17.3.1 获取方法的相关信息 467
17.3.2 GetMethods()的另一种形式 470
17.3.3 使用反射调用方法 471
17.3.4 获取Type对象的构造函数 474
17.3.5 从程序集获得类型 478
17.3.6 全自动类型查询 483
17.4 特性 486
17.4.1 特性基础 486
17.4.2 创建特性 486
17.4.3 连接特性 487
17.4.4 获取对象的特性 487
17.4.5 位置参数和命名参数 489
17.5 三个内置特性 493
17.5.1 AttributeUsage特性 493
17.5.2 Conditional特性 494
17.5.3 Obsolete特性 495
第18章 泛型 497
18.1 泛型概念 497
18.2 一个简单的泛型示例 498
18.2.1 泛型类型因类型参数的不同而不同 501
18.2.2 泛型如何实现类型安全 501
18.3 使用两个类型参数的泛型类 504
18.4 泛型类的通用形式 505
18.5 类型约束 505
18.5.1 基类约束 506
18.5.2 接口约束 514
18.5.3 new()构造函数约束 518
18.5.4 引用类型和值类型约束 519
18.5.5 使用约束建立两个类型参数之间的关系 522
18.5.6 使用多重约束 523
18.6 创建类型参数的默认值 524
18.7 泛型结构 525
18.8 创建泛型方法 526
18.8.1 调用泛型方法时显式地指定类型实参 529
18.8.2 为泛型方法指定约束 529
18.9 泛型委托 529
18.10 泛型接口 532
18.11 比较同一类型参数的实例 536
18.12 泛型类的层次结构 539
18.12.1 使用泛型基类 539
18.12.2 泛型派生类 541
18.13 重写泛型类中的虚方法 542
18.14 重载带类型参数的方法 544
18.15 泛型类型的实例化 545
18.16 使用泛型时的一些局限 546
18.17 小结 546
第19章 LINQ 547
19.1 LINQ的定义 547
19.2 LINQ的基础知识 548
19.2.1 简单查询 548
19.2.2 查询可以多次执行 550
19.2.3 查询中的数据类型的关联方式 551
19.2.4 查询的一般形式 552
19.3 使用where子句筛选值 552
19.4 使用orderby子句排序结果 554
19.5 深入讨论select子句 558
19.6 使用嵌套的from子句 561
19.7 使用group子句分组结果 562
19.8 使用into子句创建继续 564
19.9 在查询中使用let子句创建变量 566
19.10 使用join子句连接两个序列 567
19.11 匿名类型 570
19.12 创建组连接 572
19.13 查询方法 575
19.13.1 基本查询方法 575
19.13.2 使用查询方法创建查询 576
19.13.3 查询语法与查询方法的对比 578
19.13.4 更多与查询相关的扩展方法 578
19.14 延期执行查询和立即执行查询 581
19.15 表达式树 582
19.16 扩展方法 583
第20章 不安全代码、指针、空类型和其他主题 587
20.1 不安全代码 587
20.1.1 指针基础 588
20.1.2 使用unsafe关键字 589
20.1.3 使用fixed修饰符 590
20.1.4 通过指针访问结构成员 591
20.1.5 指针运算 591
20.1.6 指针的比较 593
20.1.7 指针和数组 593
20.1.8 指针和字符串 595
20.1.9 多重间接寻址 596
20.1.10 指针数组 597
20.1.11 sizeof 597
20.1.12 stackalloc 597
20.1.13 创建固定大小的缓冲区 598
20.2 空类型 599
20.2.1 空类型基础 600
20.2.2 表达式中的空对象 601
20.2.3 ??运算符 602
20.2.4 在空对象上使用关系和逻辑运算符 603
20.3 部分类型 604
20.4 部分方法 605
20.5 友元程序集 606
20.6 其他关键字 607
20.6.1 lock关键字 607
20.6.2 readonly关键字 607
20.6.3 const和volatile关键字 608
20.6.4 using语句 608
20.7 extern关键字 609
20.7.1 声明extern方法 610
20.7.2 声明extern程序集别名 611
第Ⅱ部分 C#类库研究
第21章 研究System名称空间 615
21.1 System的成员 615
21.2 Math类 617
21.3 与内置值类型对应的.NET结构 622
21.3.1 整型结构 623
21.3.2 浮点类型结构 625
21.3.3 Decimal结构 628
21.3.4 Char结构 633
21.3.5 Boolean结构 638
21.4 Array类 639
21.4.1 排序和搜索数组 646
21.4.2 反转数组 649
21.4.3 复制数组 649
21.4.4 使用谓词 650
21.4.5 使用Action委托 652
21.5 BitConverter类 653
21.6 用Random产生随机数 655
21.7 内存管理和GC类 656
21.8 Object类 657
21.9 IComparable和IComparable[T]接口 657
21.10 IEquatable[T]接口 658
21.11 IConvertible接口 658
21.12 ICloneable接口 658
21.13 IFormatProvider接口和
IFormattable接口 660
第22章 字符串和格式化 663
22.1 C#中的字符串 663
22.2 String类 663
22.2.1 字符串构造函数 664
22.2.2 String类的字段、索引器和属性 664
22.2.3 字符串运算符 665
22.2.4 字符串方法 665
22.2.5 填充和剪裁字符串 679
22.2.6 插入、删除和替换 681
22.2.7 改变字母大小写 682
22.2.8 使用Substring()方法 682
22.2.9 字符串扩展方法 683
22.3 格式化类型 683
22.3.1 格式化类型概述 683
22.3.2 数值型数据的格式说明符 684
22.3.3 理解参数编号 686
22.4 使用String.Format()和
ToString()格式化数据 686
22.4.1 使用String.Format()格式化值 686
22.4.2 使用ToString()格式化数据 689
22.5 自定义数字格式 690
22.6 格式化日期和时间 693
22.7 格式化枚举 697
第23章 多线程程序设计 701
23.1 多线程基础 701
23.2 Thread类 702
23.2.1 创建和启动线程 702
23.2.2 一些简单的改进 705
23.2.3 创建多个线程 706
23.3 确定线程结束的时间 708
23.4 为线程传递参数 710
23.5 IsBackground属性 712
23.6 线程优先级 713
23.7 同步 715
23.7.1 实现同步的另一种方式 719
23.7.2 Monitor类和锁 720
23.8 使用Wait()、Pulse()和PulseAll()实现线程通信 721
23.8.1 Wait()和Pulse()的示例 721
23.8.2 死锁和竞争条件 725
23.9 使用MethodImplAttribute属性 725
23.10 使用互斥锁和信号量 727
23.10.1 互斥锁 727
23.10.2 信号量 731
23.11 使用事件 734
23.12 Interlocked类 736
23.13 终止线程 737
23.13.1 Abort()的另一种形式 739
23.13.2 取消Abort() 740
23.14 挂起和恢复线程 742
23.15 判断线程的状态 742
23.16 使用主线程 742
23.17 多线程编程提示 744
23.18 开启独立任务 744
第24章 集合、枚举器和迭代器 747
24.1 集合概述 747
24.2 非泛型集合 748
24.2.1 非泛型接口 748
24.2.2 DictionaryEntry结构 752
24.2.3 非泛型集合类 753
24.3 使用BitArray类存储位 768
24.4 专用集合 770
24.5 泛型集合 771
24.5.1 泛型接口 771
24.5.2 KeyValuePair[TK,TV]结构 775
24.5.3 泛型集合类 775
24.6 在集合中存储用户自定义的类 793
24.7 实现IComparable接口 795
24.7.1 为非泛型集合实现IComparable接口 796
24.7.2 为泛型集合实现IComparable[T]接口 797
24.8 使用IComparer接口 799
24.8.1 使用非泛型的IComparer 799
24.8.2 使用泛型的IComparer[T] 800
24.9 通过枚举器访问集合 802
24.9.1 使用枚举器 802
24.9.2 使用IDictionaryEnmerator 803
24.10 实现IEnumerable和IEnumerator接口 805
24.11 迭代器 806
24.11.1 停用迭代器 808
24.11.2 使用多个yield指令 809
24.11.3 创建命名迭代器 810
24.11.4 创建泛型迭代器 811
24.12 集合初始化器 812
第25章 通过Internet连网 813
25.1 System.Net的成员 813
25.2 统一资源标识符 815
25.3 Internet访问基础 815
25.3.1 WebRequest类 816
25.3.2 WebResponse类 818
25.3.3 HttpWebRequest类和HttpWebResponse类 819
25.3.4 第一个简单的示例 819
25.4 处理网络错误 821
25.4.1 Create()产生的异常 822
25.4.2 GetResponse()产生的异常 822
25.4.3 GetResponseStream()产生的异常 822
25.4.4 使用异常处理 822
25.5 Uri类 824
25.6 访问附加的HTTP响应信息 825
25.6.1 访问报头 826
25.6.2 访问Cookie 827
25.6.3 使用LastModified属性 829
25.7 MiniCrawler:案例分析 829
25.8 使用WebClient 833
第26章 使用System.Windows.Forms创建基于窗体的Windows应用程序 837
26.1 Windows程序设计简史 837
26.2 编写基于窗体的Windows应用程序的两种方式 838
26.3 Windows与用户交互操作的方法 838
26.4 Windows窗体 839
26.5 基于窗体的Windows框架程序 839
26.6 添加按钮 841
26.6.1 按钮概述 842
26.6.2 给窗体添加按钮 842
26.6.3 简单的按钮示例 842
26.7 消息处理 843
26.8 使用消息框 845
26.9 添加菜单 848
26.9.1 创建传统样式的主菜单 848
26.9.2 使用MenuStrip创建新式菜单 852
附录A 文档注释快速参考 857
猜您喜欢