标题：C#3.0完全参考手册
图书信息
书名： C# 3.0完全参考  手册
作者：希尔特(HerbertSchildt)
赵利通 
出版社：清华大学出版社
出版时间： 2010年03月01日
上架日期： 2010年04月16日
ISBN: 9787302220725
开本： 16开
装帧：平装
定价: 128.00元
内容简介
这本综合性指南采用了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.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