第1章 Microsoft.NET综述 1
1.1 概述 1
1.2.2 ADO.NET 2
1.2.1 公共语言运行时和基础类库 2
1.2 Microsoft.NET开发框架 2
1.2.3 ASP.NET 3
1.2.6 与COM的关系 4
1.2.5 .NET中的编程语言和开发工具 4
1.2.4 Windows应用 4
1.2.7 .NET框架的核心要素 5
1.5 .NET几大热点问题 6
1.4 .NET框架的优点 6
1.3 .NET的核心组件 6
习题 9
1.6 小结 9
2.1 C#语言概述 11
第2章 C#简介 11
2.1.1 C++和C#的比较 13
2.1.2 C#和Java 14
2.2.1 简单 16
2.2 C#语言的特点 16
2.2.4 类型安全 17
2.2.3 面向对象 17
2.2.2 现代 17
2.2.7 灵活 18
2.2.6 兼容 18
2.2.5 版本可控 18
习题 19
2.4 小结 19
2.3 C#的弱点 19
3.1.1 安装准备工作 21
3.1 构建开发环境 21
第3章 C#初步 21
3.1.2 开始安装 22
3.2.1 选择编写C#代码的工具 25
3.2 开发工具的使用 25
实例3-1 第一个C#程序 27
3.2.2 第一个C#程序 27
3.2.4 名字空间 29
3.2.3 注释 29
3.2.6 Main方法 30
3.2.5 类 30
3.2.8 编译和执行 31
实例3-2 C#的控制台输入与输出 31
3.2.7 输入和输出 31
3.2.9 调试 34
3.4 应用程序的组织 35
3.3 C#程序的一般结构 35
3.4.1 名字空间 36
3.4.3 使用动态链接库 37
3.4.2 动态链接库的建立 37
习题 38
3.5 小结 38
4.1 值类型 39
第4章 数据类型 39
4.1.1 bool类型 40
实例4-1 读键盘字符测试 41
4.1.2 char类型 42
4.1.3 byte类型 43
4.1.4 sbyte类型 44
4.1.5 short类型 45
4.1.6 ushort类型 46
4.1.7 int类型 47
4.1.9 long类型 48
4.1.8 uint类型 48
4.1.10 ulong类型 50
实例4-2 多种类型混合运算 51
4.1.11 float类型 51
实例4-3 在表达式中混合多种类型 52
4.1.12 double类型 52
4.1.13 decimal类型 53
实例4-5 decimal类型的格式化 54
实例4-4 decimal转换 54
实例4-6 枚举初始化 55
4.1.14 enum类型 55
4.1.15 struct类型 56
实例4-7 使用long作为枚举成员的类型 56
实例4-8 struct声明和初始化 57
实例4-9 不使用new声明结构对象 58
4.2.1 class类型 59
4.2 引用类型 59
实例4-10 类的示例 60
实例4-11 通过代表调用静态和实例方法 62
4.2.2 delegate类型 62
实例4-12 代表元使用 63
实例4-13 复合代表 66
4.2.3 interface类型 67
实例4-14 接口的实现 68
实例4-15 显式实现接口1 70
实例4-16 显式实现接口2 71
实例4-17 objeet类型使用 73
4.2.4 object类型 73
4.2.5 string类型 74
实例4-19 string类型常用操作 75
实例4-18 string类型使用 75
4.3.1 内建类型表 76
4.3 类型参考表 76
4.3.2 整数类型表 77
4.3.5 值类型表 78
4.3.4 默认值表 78
4.3.3 浮点类型表 78
4.3.7 显式数字转换表 79
4.3.6 隐式数字转换表 79
习题 80
4.4 小结 80
5.1.2 关键字 83
5.1.1 标识符 83
第5章 变量和常量 83
5.1 标识符和关键字 83
5.2.1 变量命名 84
5.2 变量 84
5.2.2 变量的类型 85
5.3 常量 86
5.4.1 命名变量、方法以及属性 87
5.4 .NET命名规则 87
5.4.3 匈牙利命名法 88
5.4.2 命名组件以及集合 88
习题 89
5.5 小结 89
6.1.1 装箱概述 91
6.1 装箱转换 91
第6章 装箱和拆箱转换 91
6.1.3 装箱转换实例 92
6.1.2 装箱转换 92
6.2.1 拆箱概述 93
6.2 拆箱转换 93
实例6-1 装箱转换 93
实例6-2 错误的拆箱操作引起异常 94
6.2.3 拆箱转换实例 94
6.2.2 拆箱转换 94
习题 95
6.3 小结 95
7.1 数组的基本概念 97
第7章 数组 97
7.2.1 一维数组的声明 98
7.2 数组声明 98
7.2.3 锯齿数组的声明 99
7.2.2 多维数组的声明 99
7.3 数组初始化 100
实例7-1 定义数组 100
7.3.2 数组初始化 101
7.3.1 创建数组空间 101
7.4.2 使用foreach-in语句循环访问数组 103
7.4.1 使用普通方法访问数组成员 103
7.4 访问数组成员 103
实例7-2 利用二维数组实现矩阵相乘 104
7.4.3 访问数组成员的综合应用 104
7.6 传递数组参数 105
7.5 数组是对象 105
实例7-4 数组的数组 106
实例7-3 一维数组传递 106
7.6.1 传递一维数组参数 106
实例7-5 二维数组传递 107
7.6.2 传递多维数组参数 107
实例7-6 使用out把数组传递给方法 108
7.6.3 使用ref和out传递数组 108
实例7-7 使用ref把数组传递给方法 109
习题 110
7.7 小结 110
8.1.1 if-else条件语句 113
8.1 选择语句 113
第8章 流程控制 113
实例8-1 使用if条件控制语句确定字符的形态 115
8.1.2 switch-case语句 116
实例8-2 变量为整型的switch语句 117
8.1.3 C#和C/C++中switch语句的差别 118
实例8-3 变量为字符的switch语句 118
实例8-6 实例8-4修改后的合法表示 119
实例8-5 C#中合法的switch语句 119
实例8-4 C#中非法的switch语句 119
8.2.1 for循环 120
8.2 循环语句 120
实例8-8 for循环的多层嵌套 121
实例8-7 使用for循环计算阶乘 121
实例8-9 选择排序 122
8.2.3 do-while循环 123
实例8-10 使用StreamReader类输出C#源文件到屏幕 123
8.2.2 while循环 123
实例8-11 do-while循环使用 124
实例8-12 用foreach扫描整个列表并打印所有元素 125
8.3.2 使用foreach语句遍历数据列表 125
8.3 foreach语句 125
8.3.1 foreach语句的语法规则 125
实例8-13 使用foreach语句读取所有的环境变量 126
8.3.3 使用foreach语句读取所有环境变量 126
8.3.5 对集合使用foreach语句 127
实例8-14 对数组使用foreach语句 127
8.3.4 foreach语句应用于数组 127
实例8-15 对C#语言集合使用foreach语句 128
实例8-16 对通用集合使用foreach语句 129
实例8-17 使用Hashtable集合类 131
实例8-18 break语句使用 132
8.4.1 break语句 132
8.4 跳出、继续和转向语句 132
实例8-19 continue语句使用 133
8.4.2 continue语句 133
实例8-20 goto语句使用 134
8.4.3 goto语句 134
实例8-21 return语句使用 135
8.4.4 return语句 135
实例8-22 自动内存管理 136
8.5 C#内存管理控制综合实例 136
习题 138
8.6 小结 138
9.1 类的声明 143
第9章 类 143
实例9-1 class类型使用 144
实例9-2 类成员访问修饰符的用法 145
9.2.1 对类成员的访问 145
9.2 类的成员 145
实例9-3 this关键字 146
9.2.2 this关键字 146
9.2.3 静态成员和非静态成员 147
9.2.4 成员常量 148
9.3.1 构造函数 149
9.3 构造函数和析构函数 149
实例9-4 带参数的构造函数 150
9.3.2 构造函数的参数 150
9.4 类的方法 152
9.3.3 析构函数 152
实例9-5 通过值传递参数 153
9.4.1 方法参数 153
实例9-7 定义一个输出参数 154
实例9-6 通过引用传递参数 154
实例9-8 数组型参数 155
实例9-9 改写一个基类的方法 156
9.4.2 方法改写 156
实例9-10 调用基类实现 157
实例9-12 派生类实现基类中相同的方法 158
实例9-11 派生类屏蔽基类方法 158
9.4.3 方法屏蔽 158
9.4.4 类的属性 159
实例9-13 派出类覆盖基类方法 159
9.5 事件处理 160
实例9-14 实现属性存取标志 160
实例9-15 在类中实现事件处理 161
9.6 索引指示器 162
实例9-16 通过一个索引获取一个IP地址 163
实例9-17 抽象类和密封类 164
9.7.1 类修饰符 164
9.7 使用修饰符 164
9.7.3 存取修饰符 165
9.7.2 成员修饰符 165
实例9-18 存取修饰符的使用 166
习题 167
9.8 小结 167
10.1 域 171
第10章 域和属性 171
实例10-1 静态域和非静态域 172
10.1.1 静态域和非静态域 172
10.1.2 域的初始化 173
10.2.1 属性的声明 174
10.2 属性 174
实例10-2 属性使用 175
10.3 访问器 176
10.3.1 语法规则 177
实例10-3 隐藏属性 178
10.3.3 隐藏属性实例 178
10.3.2 说明 178
实例10-4 正方形和立方体的面积与边长求解 180
10.3.4 覆盖属性实例 180
10.4.2 说明 182
10.4.1 语法规则 182
10.4 接口属性 182
实例10-5 接口属性应用 183
10.4.3 实例 183
实例10-6 声明和使用可读可写属性 185
10.5.1 声明和使用可读可写属性实例 185
10.5 应用实例 185
实例10-7 abstractshape.cs程序 187
10.5.2 定义抽象属性实例 187
实例10-8 shapes.cs程序 188
实例10-9 shapetest.cs程序 189
习题 190
10.6 小结 190
11.1 方法的声明 193
第11章 方法 193
11.2 Main方法 194
实例11-1 return语句使用 194
实例11-2 计算输入值的阶乘 195
11.2.1 返回值 195
实例11-3 使用参数 196
11.2.2 命令行参数 196
实例11-4 获到主机IP地址 197
11.2.3 获得主机IP地址实例 197
习题 199
11.3 小结 199
12.1.1 操作符分类 201
12.1 操作符概述 201
第12章 操作符 201
12.2.1 []操作符 202
12.2 操作符说明 202
12.1.2 算术溢出 202
12.2.2 ()操作符 203
12.2.3 .操作符 204
实例12-1 double强制转换成int 204
实例12-3 一元-操作符和二元-操作符 205
12.2.5 -操作符 205
12.2.4 +操作符 205
实例12-2 +操作符的多种用法 205
12.2.7 /操作符 206
实例12-4 *操作符应用 206
12.2.6 *操作符 206
实例12-6 %操作符应用 207
12.2.8 %操作符 207
实例12-5 /操作符应用 207
实例12-8 |操作符应用 208
12.2.10 |操作符 208
12.2.9 &操作符 208
实例12-7 &操作符应用 208
实例12-10 =操作符应用 209
12.2.12 =操作符 209
12.2.11 ~操作符 209
实例12-9 ~操作符应用 209
实例12-12 ^操作符应用 210
12.2.14 ^操作符 210
12.2.13 <操作符 210
实例12-11 <操作符应用 210
实例12-14 >操作符应用 211
12.2.16 >操作符 211
12.2.15 !操作符 211
实例12-13 !操作符应用 211
实例12-15 ?:操作符应用 212
12.2.17 ?:操作符 212
实例12-16 ++操作符应用 213
12.2.18 ++操作符 213
12.2.20 &&操作符 214
实例12-17 --操作符应用 214
12.2.19 --操作符 214
12.2.21 ||操作符 215
实例12-18 &&操作符应用 215
12.2.22 <<操作符 216
实例12-19 ||操作符应用 216
12.2.23 >>操作符 217
实例12-20 <<操作符应用 217
实例12-22 ==操作符应用 218
12.2.24 ==操作符 218
实例12-21 >>操作符应用 218
实例12-23 !=操作符应用 219
12.2.25 !=操作符 219
12.2.27 >=操作符 220
实例12-24 <=操作符应用 220
12.2.26 <=操作符 220
12.2.29 -=操作符 221
实例12-26 +=操作符应用 221
实例12-25 >=操作符应用 221
12.2.28 +=操作符 221
12.2.31 /=操作符 222
实例12-28 *=操作符应用 222
实例12-27 -=操作符应用 222
12.2.30 *=操作符 222
12.2.33 &=操作符 223
实例12-30 %=操作符应用 223
实例12-29 /=操作符应用 223
12.2.32 %=操作符 223
实例12-32 |=操作符应用 224
12.2.34 |=操作符 224
实例12-31 &=操作符应用 224
实例12-34 <<=操作符应用 225
12.2.36 <<=操作符 225
12.2.35 ^=操作符 225
实例12-33 ^=操作符应用 225
实例12-36 ->操作符应用 226
12.2.38 ->操作符 226
12.2.37 >>=操作符 226
实例12-35 >>=操作符应用 226
12.3.2 操作符重载实例 227
12.3.1 可重载操作符 227
12.3 操作符重载 227
实例12-37 复数类型重载 228
实例12-38 重载三值逻辑类型的操作符 229
12.4 操作符关键词 232
实例12-39 as操作符应用 233
12.4.1 as关键词 233
实例12-40 is操作符应用 234
12.4.2 is操作符 234
12.4.4 new操作符 236
实例12-41 false关键词应用 236
12.4.3 false关键词 236
实例12-42 new操作符应用 237
12.4.5 new修饰符 238
实例12-43 new修饰符应用 239
12.4.6 sizeof操作符 240
实例12-44 对嵌套类型使用new修饰符 240
实例12-46 typeof关键词应用 241
12.4.7 typeof关键词 241
实例12-45 sizeof操作符应用 241
实例12-48 true关键词应用 243
12.4.8 true关键词 243
实例12-47 使用GetType方法 243
实例12-49 stackalloc关键词应用 244
12.4.9 stackalloc关键词 244
习题 245
12.5 小结 245
13.1 修饰符分类 247
第13章 修饰符 247
13.2.1 存取属性级别 248
13.2 存取修饰符 248
实例13-1 存取属性范围 249
13.2.2 存取属性范围 249
13.2.3 使用存取属性的限制 250
实例13-2 使用声明的存取属性限制 251
实例13-4 private修饰符应用 252
13.2.5 private修饰符 252
13.2.4 internal修饰符 252
实例13-3 internal修饰符应用 252
实例13-5 protected修饰符应用 253
13.2.6 protected修饰符 253
实例13-7 存取公开成员 254
13.2.7 public修饰符 254
实例13-6 在继承类中存取基类受保护成员 254
13.3 abstract修饰符 255
实例13-8 抽象类应用 256
13.4 const修饰符 257
实例13-9 在类中使用常量 258
13.5 event修饰符 259
实例13-10 事件的创建和调用 260
实例13-11 event修饰符示例1 261
实例13-12 event修饰符示例2 263
13.6 extern修饰符 264
实例13-14 extern修饰符示例 265
实例13-13 消息框 265
实例13-15 调用基类中被覆盖的方法 266
13.7 override修饰符 266
13.8 readonly修饰符 267
实例13-16 只读域 268
13.10 static修饰符 269
实例13-17 密封类 269
13.9 sealed修饰符 269
实例13-18 静态成员应用 270
实例13-19 虚方法和覆盖 271
13.11 virtual修饰符 271
习题 273
13.12 小结 273
14.1 名字空间概述 277
第14章 名字空间 277
实例14-1 把两个类定义成为名字空间的一部分 278
14.2.2 说明 278
14.2 namespace关键词 278
14.2.1 语法规则 278
14.3.1 语法规则 279
14.3 using关键词 279
实例14-2 使用namespace关键词声明名字空间 279
实例14-3 定义和使用名字空间的using别名 280
14.3.2 说明 280
14.4 C#和Java的名字空间 281
实例14-4 定义using指令及使用类的using别名 281
实例14-5 C#编程中名字空间的重要作用 282
14.5 C#堆栈实现 282
实例14-7 客户程序:自定义名字空间的使用 284
实例14-6 自定义名字空间 284
14.6 名字空间应用实例 284
习题 285
14.7 小结 285
15.1.1 目录管理 287
15.1 文件存储管理 287
第15章 文件操作 287
实例15-1 查询文件夹的信息以及文件夹中包含的文件名 288
实例15-2 显示指定文件的属性 289
15.1.2 文件管理 289
实例15-3 文件的复制和删除 290
15.1.3 复制和删除 290
实例15-4 读取并输出文本文件 291
15.2.1 读取文本文件 291
15.2 读写文件 291
实例15-5 写内容到文本文件 292
15.2.2 写入文本文件 292
实例15-6 写入二进制文件 293
15.2.3 写入二进制文件 293
15.3 文件操作实例 294
实例15-7 读取二进制文件 294
15.2.4 读取二进制文件 294
实例15-8 读文件 295
实例15-9 写文件,加行号输出 296
实例15-10 文件行数统计 297
习题 298
15.4 小结 298
实例16-1 #if预处理指令应用 299
16.1 #if预处理指令 299
第16章 预处理指令 299
16.3 #elif预处理指令 300
16.2 #else预处理指令 300
实例16-2 #undef预处理指令应用 301
16.6 #undef预处理指令 301
16.4 #endif预处理指令 301
16.5 #define预处理指令 301
16.8 #error预处理指令 302
实例16-3 #warning预处理指令应用 302
16.7 #warning预处理指令 302
16.10 #region预处理指令 303
实例16-5 #line预处理指令应用 303
实例16-4 #error预处理指令应用 303
16.9 #line预处理指令 303
习题 304
16.12 小结 304
实例16-6 #region预处理指令应用 304
16.11 #endregion预处理指令 304
实例17-1 计算一个数的阶乘 305
17.1 校验和非校验语句 305
第17章 异常处理 305
17.1.2 语法溢出校验 306
17.1.1 在编译器设置溢出校验 306
17.2.1 使用try和catch捕获异常 307
17.2 抛出异常的方法 307
实例17-2 阶乘计算中的溢出校验 307
实例17-3 捕获由factorial calculation引发的OverflowException异常 308
实例17-4 在finally语句中处理异常 309
17.2.2 使用try和finally清除异常 309
实例17-5 从try语句跳转到finally语句 310
实例17-7 顺序不适当的catch语句 311
实例17-6 实现多个catch语句 311
17.2.3 使用try-catch-finally处理所有异常 311
17.3 抛出异常 312
实例17-9 创建自己的异常类 313
17.3.2 创建自己的异常类 313
17.3.1 重新引发异常 313
实例17-8 重新引发一个异常 313
17.4 异常处理的注意事项 314
习题 315
17.5 小结 315
18.1.1
18.1 文档注释标记 317
第18章 XML文档 317
18.1.2 标记 318
实例18-1
实例18-2
18.1.3
实例18-3
18.1.4
18.1.5 标记 321
18.1.6
实例18-4 标记应用 322
18.1.8
实例18-5 标记应用 323
18.1.7 标记 323
18.1.9
实例18-6
实例18-8
18.1.10
实例18-7
实例18-9
18.1.11
18.1.14
18.1.13
18.1.12
18.1.15
实例18-10
18.2 处理XML文件 329
实例18-11
实例18-12 注释用户定义的类、方法和属性等 331
18.3 应用实例 331
习题 334
18.4 小结 334
实例19-1 创建从Web服务器返回HTML网页的类 335
19.1.1 创建C#组件 335
第19章 用C#编写组件的方法 335
19.1 创建和编译C#组件 335
19.1.3 在客户应用程序中使用组件 337
19.1.2 编译C#组件 337
19.2 使用名字空间工作 338
实例19-2 用RequestWebPage类返回一个简单的网页 338
实例19-3 在名字空间中实现WhoisLookup类 339
19.2.1 在名字空间中包装类 339
实例19-4 测试WhoisLookup组件 341
19.2.2 在客户应用程序中使用名字空间 341
实例19-5 传递命令行参数给Query方法 342
19.2.3 增加多个类到名字空间 343
习题 344
19.3 小结 344
实例20-1 第一个Windows Forms程序 345
20.1 Windows Forms程序初步 345
第20章 Windows Forms编程 345
20.2 Windows Forms编程模式 346
实例20-2 Windows 2000透明窗体 347
20.2.1 窗体 347
20.2.2 控件 348
实例20-3 向窗体添加控件 349
20.2.3 事件 350
实例20-4 为控件注册事件 351
实例20-5 一个事件处理方法中处理多个事件 354
20.3.1 给窗体添加主菜单 356
20.3 菜单设计 356
实例20-6 创建窗体主菜单 357
实例20-7 上下文菜单应用 359
20.3.2 创建上下文菜单 359
20.4 重画窗口 361
实例20-8 OnPaint方法应用 362
20.5.1 MDI编程 363
20.5 GUI编程实例 363
实例20-9 C#MDI演示程序 366
20.5.2 简单的计算器程序 368
实例20-10 一个简单的计算器程序 370
实例20-11 获得计算机名称和IP地址 375
20.5.3 获得计算机名称和IP地址 375
20.5.4 C#的API编程 378
实例20-12 Hello World!MessageBox信息框 379
实例20-13 获取系统信息 382
20.5.5 使用注册表 386
实例20-14 注册表信息读取与设置 387
实例20-15 文本文件打印 393
20.5.6 文件打印 393
习题 397
20.6 小结 397
21.1 ADO.NET 399
第21章 C#数据库编程 399
21.1.1 Connection对象 400
21.1.4 DataView对象 401
21.1.3 DataSet对象 401
21.1.2 Command对象 401
21.1.6 DataAdapter对象 402
21.1.5 DataReader对象 402
21.1.8 两种连接数据库的方式 404
21.1.7 Command与DataAdapter比较 404
21.1.9 读取数据 405
21.1.10 连接数据库应用实例 406
实例21-1 ADO读取数据库信息 407
实例21-2 使用DataGrid显示Access数据库中的数据 410
21.2.1 DataGrid数据浏览 410
21.2 C#数据库的Windows编程 410
实例21-3 动态DataGrid 412
实例21-4 SQL Managed Povider连接SQL Sever 7.0数据库 415
21.2.2 访问SQL Server 7.0数据库 415
21.2.3 自定义界面的数据浏览 417
实例21-5 浏览书籍信息 421
21.3 C#与ASP.NET结合 427
实例21-6 C#与ASP.NET结合开发Web应用程序 430
习题 437
21.4 小结 437
22.1 Web Service概述 439
第22章 Web Service编程 439
实例22-1 Hello World的Web Service程序 441
22.1.1 如何编写Web Service 441
22.1.2 Web Service测试 442
22.1.3 从客户端进行访问 443
22.2 Web Service编程实例 444
22.1.4 Web Service中的数据类型 444
实例22-2 返回DataSet的Web Service程序 445
22.2.1 返回DataSet的Web Service实例 445
22.2.2 在客户机上部署Web Service 447
实例22-3 访问Web Service的ASP.NET程序代码 450
22.3 小结 451
习题 452
附录A C#有关资源 453