《C#揭秘》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:(美)JOEMAYO编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2010
  • ISBN:9787115222213
  • 页数:696 页
图书介绍:本书是C#领域内的权威之作,秉承了Unleashed系列书的一贯风格,内容系统、全面,而且实践性和可操作性很强。本书不仅系统地阐述了C# 3.0的规范、语言特性和常用技巧,而且还透彻地讲解了与.NET Framework 3.5相关的一些新特性。

第一部分 C#基础 2

第1章 .NET平台简介 2

1.1 .NET是什么 2

1.2 CLR 3

1.2.1 为什么CLR如此重要 3

1.2.2 CLR特性 4

1.2.3 CLR执行过程 4

1.3 .NET FCL 6

1.4 C#和其他.NET语言 7

1.5 CTS 7

1.6 CLS 7

1.7 小结 8

第2章 C#和Visual Studio 2008概述 9

2.1 编写一个简单的C#程序 9

2.2 创建一个VS2008项目 12

2.2.1 运行新项目向导 12

2.2.2 理解解决方案和项目 14

2.2.3 使用VS2008编写代码 15

2.2.4 生成和运行程序 16

2.2.5 设置编译器选项 18

2.3 注释代码 19

2.3.1 多行注释 19

2.3.2 单行注释 19

2.3.3 XML文档注释 19

2.4 标识符和关键字 21

2.4.1 标识符 21

2.4.2 关键字 22

2.5 约定和风格 22

2.6 变量和类型 23

2.6.1 变量 23

2.6.2 简单类型 24

2.7 明确赋值 27

2.8 与程序交互 28

2.8.1 与控制台屏幕通信 28

2.8.2 与命令行通信 28

2.8.3 VS2008中的命令行选项 28

2.8.4 从程序返回值 30

2.9 小结 30

第3章 编写C#表达式和语句 31

3.1 C#运算符 31

3.1.1 一元运算符 31

3.1.2 二元运算符 33

3.1.3 关系运算符 34

3.1.4 逻辑运算符 36

3.1.5 赋值运算符 38

3.1.6 三元运算符 38

3.1.7 其他运算符 39

3.2 语句 40

3.3 块和作用域 40

3.4 标签 41

3.5 运算符优先级和结合性 41

3.6 选择和循环语句 42

3.6.1 if语句 42

3.6.2 switch语句 44

3.6.3 C#循环 45

3.6.4 goto语句 48

3.6.5 break语句 49

3.6.6 continue语句 50

3.6.7 return语句 50

3.7 小结 51

第4章 理解引用类型和值类型 52

4.1 引用类型和值类型简介 52

4.2 统一类型系统 53

4.2.1 统一类型系统的工作原理 53

4.2.2 使用object进行通用编程 54

4.2.3 装箱和拆箱对性能的潜在影响 54

4.3 引用类型和值类型的内存分配 56

4.3.1 引用类型内存分配 57

4.3.2 值类型内存分配 58

4.4 引用类型和值类型赋值 58

4.4.1 引用类型赋值 58

4.4.2 值类型赋值 61

4.5 引用类型和值类型之间的更多区别 62

4.5.1 引用类型和值类型继承的区别 62

4.5.2 引用类型和值类型构建和终结的区别 62

4.5.3 引用类型和值类型对象大小的考虑 63

4.6 C#和.NET框架类型 63

4.6.1 C#别名和CTS 63

4.6.2 使用System.Guid 64

4.6.3 操作System.DateTime 65

4.7 可空类型 69

4.8 小结 70

第5章 操作字符串 71

5.1 C#字符串类型 71

5.1.1 格式化字符串 72

5.1.2 比较字符串 74

5.1.3 检查字符串是否相等 75

5.1.4 连接字符串 75

5.1.5 复制字符串 76

5.1.6 检查字符串内容 77

5.1.7 提取字符串信息 77

5.1.8 填充和移除字符串输出 78

5.1.9 更改字符串内容 79

5.1.10 分离和结合字符串 80

5.1.11 操作字符串字符 81

5.1.12 通过驻留池影响CLR的字符串处理 82

5.2 StringBuilder类 83

5.2.1 Append方法 83

5.2.2 AppendFormat方法 83

5.2.3 EnsureCapacity方法 84

5.2.4 ToString()方法 84

5.3 正则表达式 84

5.3.1 基本的正则表达式操作 85

5.3.2 深入了解正则表达式 85

5.3.3 练习正则表达式的应用程序 86

5.4 小结 88

第6章 数组和枚举 89

6.1 数组 89

6.1.1 一维数组 90

6.1.2 多维数组 91

6.1.3 交错数组 92

6.2 System.Array类 93

6.2.1 数组边界 93

6.2.2 搜索和排序 94

6.3 使用枚举类型 95

6.4 System.Enum结构 97

6.4.1 枚举类型、整型和字符串之间的转换 97

6.4.2 迭代枚举类型成员 98

6.4.3 其他System.Enum成员 98

6.5 小结 99

第7章 用Visual Studio 2008调试应用程序 100

7.1 单步调试代码 100

7.1.1 调试示例程序 100

7.1.2 设置断点 100

7.1.3 检查程序状态 101

7.1.4 单步调试代码 103

7.1.5 其他必备的调试命令 104

7.1.6 使用调试器找出程序错误 104

7.1.7 附加到进程 107

7.2 小结 109

第二部分 使用C#面向对象编程第8章 设计对象 112

8.1 对象成员 112

8.2 实例和静态成员 113

8.3 字段 113

8.3.1 常量字段 114

8.3.2 readonly字段 114

8.4 方法 114

8.5 属性 115

8.5.1 声明属性 115

8.5.2 使用属性 115

8.5.3 自动实现属性 116

8.5.4 VS2008属性代码段 116

8.6 索引器 116

8.7 回顾一下哪里适合使用分部类型 117

8.8 静态类 118

8.9 System.Object类 118

8.9.1 检查对象类型 118

8.9.2 比较引用 119

8.9.3 检查相等性 119

8.9.4 获得散列值 119

8.9.5 克隆对象 120

8.9.6 将对象作为字符串使用 120

8.10 小结 121

第9章 设计面向对象程序 122

9.1 继承 122

9.1.1 基类 123

9.1.2 调用基类成员 123

9.1.3 隐藏基类成员 124

9.1.4 版本控制 124

9.1.5 密封类 126

9.2 封装对象内部信息 127

9.2.1 数据隐藏 127

9.2.2 使用修饰符支持封装 127

9.2.3 用于对象的访问修饰符 130

9.2.4 包含和继承 130

9.3 多态 131

9.3.1 仔细查看多态解决的问题 131

9.3.2 使用多态来解决问题 133

9.3.3 属性多态 135

9.3.4 索引器多态 135

9.3.5 覆写System.Object类成员 136

9.4 小结 138

第10章 编写方法和自定义操作符 139

10.1 方法 139

10.1.1 定义方法 139

10.1.2 本地变量 140

10.1.3 方法参数 141

10.2 重载方法 146

10.3 操作符重载 147

10.3.1 用于自定义类型的算数操作符重载 147

10.3.2 自定义类型上的逻辑操作符重载 149

10.3.3 其他操作符重载技巧 150

10.4 转换和转换操作符重载 151

10.4.1 隐式转换与显式转换 151

10.4.2 自定义值类型转换操作符 154

10.4.3 自定义引用类型转换操作符 156

10.5 部分方法 157

10.6 扩展方法 158

10.7 小结 159

第11章 错误处理和异常处理 161

11.1 为什么需要异常处理 161

11.2 异常处理的语法:try/catch块的基础 162

11.3 使用finally块确保资源清理 163

11.4 处理异常 164

11.4.1 处理不同的异常类型 164

11.4.2 处理并传递异常 165

11.4.3 从异常中恢复 167

11.5 自定义异常 169

11.6 checked和unchecked语句 171

11.7 小结 173

第12章 使用委托和事件进行基于事件的编程 174

12.1 揭示委托 174

12.1.1 定义委托 175

12.1.2 创建委托的方法处理器 175

12.1.3 在委托上附加处理器 175

12.1.4 通过委托调用方法 176

12.1.5 使用委托实现多播 176

12.1.6 检查委托的相等性 178

12.2 实现委托推断 178

12.3 匿名方法 179

12.4 事件 180

12.4.1 定义事件处理程序 180

12.4.2 注册事件 181

12.4.3 实现事件 182

12.4.4 触发事件 184

12.4.5 修改事件的add/remove方法 186

12.5 小结 190

第13章 使用命名空间命名和组织类型 191

13.1 为什么需要命名空间 191

13.1.1 组织代码 192

13.1.2 避免命名冲突 192

13.2 命名空间指令 192

13.2.1 using指令 192

13.2.2 别名指令 193

13.3 创建命名空间 194

13.4 命名空间成员 197

13.5 作用域与可见性 197

13.6 命名空间别名修饰符 198

13.7 外部命名空间别名 199

13.8 小结 200

第14章 抽象类和接口 201

14.1 抽象类 201

14.2 抽象类与接口的不同 203

14.3 实现接口 203

14.4 定义接口类型 204

14.4.1 方法 204

14.4.2 属性 204

14.4.3 索引 205

14.4.4 事件 205

14.5 隐式实现接口 205

14.5.1 单个类的接口实现 205

14.5.2 模拟多态行为 208

14.6 显式实现接口 213

14.7 接口映射 217

14.8 接口继承 219

14.9 小结 221

第三部分 应用C#高级语言特性第15章 管理对象生命周期 224

15.1 对象初始化 224

15.1.1 实例构造函数 224

15.1.2 构造函数的重载 226

15.1.3 默认构造函数 227

15.1.4 私有构造函数 227

15.1.5 继承和实例化的顺序 228

15.1.6 静态构造函数 228

15.2 对象初始化器 229

15.3 对象终结器 229

15.4 自动内存管理 230

15.4.1 内存分配 230

15.4.2 垃圾收集器揭秘 231

15.4.3 GC优化 231

15.5 正确的资源清理方式 232

15.5.1 终结器带来的问题 233

15.5.2 Dispose模式 233

15.5.3 using语句 234

15.6 和垃圾收集器交互 235

15.7 小结 237

第16章 特性与反射 238

16.1 特性 238

16.1.1 使用特性 239

16.1.2 使用多个特性 239

16.2 特性参数 240

16.2.1 定位参数 240

16.2.2 命名参数 241

16.3 特性目标 241

16.4 创建自定义特性 242

16.5 反射 245

16.6 在特性上反射 251

16.6.1 动态创建代码 251

16.6.2 使用Reflection.Emit构建 253

16.7 小结 256

第17章 泛型与迭代器 257

17.1 非泛型集合 257

17.2 理解泛型的优点 258

17.2.1 泛型解决的问题 258

17.2.2 泛型是面向对象的 260

17.2.3 在数组、非泛型集合和泛型集合之间选择 261

17.3 构建泛型类型 262

17.3.1 使用泛型实现单链表 262

17.3.2 超越集合应用泛型 268

17.3.3 使用泛型定义类型 270

17.4 实现迭代器 273

17.4.1 GetEnumerator迭代器 273

17.4.2 方法迭代器 274

17.4.3 属性迭代器 275

17.4.4 索引迭代器 276

17.4.5 运算符迭代器 276

17.4.6 迭代器作为一个值的序列 277

17.4.7 销毁迭代器 278

17.5 小结 279

第18章 lambda表达式和表达式树 280

18.1 lambda表达式 280

18.1.1 lambda的语法 280

18.1.2 使用lambda 281

18.1.3 委托和lambda 282

18.2 表达式树 285

18.2.1 将lambda转换为表达式树 285

18.2.2 将表达式树转换为lambda 286

18.3 小结 286

第四部分 学习LINQ和.NET数据访问第19章 使用LINQ访问数据 288

19.1 LINQ to Objects 289

19.1.1 LINQ基本语法 289

19.1.2 提取投影 290

19.1.3 筛选数据 290

19.1.4 给查询结果排序 290

19.1.5 分组数据 291

19.1.6 联结数据 291

19.1.7 使用分组连接构建层次结构 291

19.2 使用LINQ to SQL查询关系数据 292

19.2.1 定义DataContext对象 292

19.2.2 通过DataContext查询 295

19.2.3 修改DataContext对象 295

19.2.4 调用存储过程 296

19.2.5 使用SQL函数 297

19.2.6 使用存储过程修改数据库 297

19.2.7 使用分部方法扩展数据处理逻辑 299

19.3 标准查询运算符 301

19.3.1 排序运算符 301

19.3.2 集合运算符 302

19.3.3 过滤操作符 303

19.3.4 量词操作符 304

19.3.5 投影操作符 304

19.3.6 分割操作符 305

19.3.7 联结操作符 305

19.3.8 分组操作符 306

19.3.9 产生操作符 307

19.3.10 相等操作符 307

19.3.11 元素操作符 308

19.3.12 转换操作符 308

19.3.13 连接操作符 309

19.3.14 聚集操作符 309

19.4 小结 310

第20章 使用ADO.NET管理数据 311

20.1 ADO.NET的架构 311

20.1.1 ADO.NET组件 311

20.1.2 连接和无连接模式 312

20.1.3 数据提供者 313

20.2 建立连接 314

20.3 查看数据 315

20.4 操作数据 317

20.4.1 插入数据 317

20.4.2 更新数据 318

20.4.3 删除数据 318

20.5 调用存储过程 319

20.6 使用无连接数据 319

20.6.1 读取数据到DataSet 319

20.6.2 将对DataSet的修改保存到数据库 320

20.7 LINQ to DataSet 323

20.7.1 使用DataTable作为数据源 323

20.7.2 强类型字段的访问 323

20.8 小结 324

第21章 操作XML数据 325

21.1 XML数据流 325

21.2 写XML 326

21.3 读取XML 327

21.4 使用XML DOM 328

21.4.1 使用XPathDocument读取XML 328

21.4.2 使用XmlDocument操作XML 329

21.5 使用LINQ to XML更容易地操作XML 329

21.5.1 LINQ to XML中的对象 330

21.5.2 创建XML文档 330

21.5.3 使用LINQ to XML操作命名空间 331

21.5.4 读取XML文档 331

21.5.5 查询XML文档 332

21.5.6 修改XML文档 332

21.6 小结 333

第22章 使用ADO.NET实体框架创建数据抽象 334

22.1 实体概览 334

22.2 使用VS2008创建实体数据模型 335

22.3 使用实体SQL查询实体 337

22.3.1 访问实体 337

22.3.2 查询实体 337

22.4 创建自定义实体 338

22.4.1 映射和架构 339

22.4.2 向模型中添加自定义实体 339

22.5 LINQ to Entities 342

22.5.1 查询实体 342

22.5.2 修改实体数据 342

22.6 小结 344

第23章 ADO.NET数据服务在云计算数据中的应用 345

23.1 在项目中添加ADO.NET数据服务 345

23.2 通过HTTP URL访问ADO.NET数据服务 346

23.2.1 查看实体集合 346

23.2.2 选择实体 346

23.2.3 筛选实体结果 348

23.2.4 给实体排序 349

23.2.5 跨越实体之间的关联 350

23.3 使用数据服务客户端库编写代码 351

23.3.1 创建客户端项目 351

23.3.2 使用WebDataQuery查询实体 351

23.3.3 添加实体 352

23.3.4 更新实体 352

23.3.5 删除实体 353

23.3.6 使用LINQ to Data Services查询实体 353

23.3.7 使用WebDataGen.exe生成类 354

23.4 小结 354

第五部分 创建桌面用户界面第24章 挖掘控制台应用程序极限 358

24.1 PasswordGenerator控制台应用程序介绍 358

24.2 与用户交互 359

24.3 处理命令行输入 360

24.4 设置控制台的颜色和位置 360

24.5 小结 362

第25章 编写Windows Forms应用程序 363

25.1 Windows Forms基础 363

25.2 VS2008对Windows Forms的支持 366

25.2.1 可视化设计环境 366

25.2.2 Windows Forms应用程序中的文件 366

25.2.3 可视化设计器如何工作 367

25.3 使用Windows Forms控件 372

25.4 MenuStrip、StatusStrip和ToolStrip控件 373

25.5 数据网格和数据绑定 375

25.5.1 建立数据绑定项目 375

25.5.2 绑定数据到ListBox控件 375

25.5.3 绑定数据到DataGridView控件 376

25.6 GDI+要素 377

25.6.1 Brush、Pen和Graphics对象 377

25.6.2 字体和绘制文本 378

25.7 附加窗体和对话框 379

25.7.1 模式和无模式对话框 379

25.7.2 窗体通信 380

25.7.3 通用对话框 381

25.8 小结 383

第26章 创建WPF应用程序 384

26.1 XAML就够了 384

26.1.1 介绍WPF应用程序 385

26.1.2 研究XAML 385

26.1.3 XAML中的控件 386

26.2 管理布局 387

26.2.1 控件对齐方式、尺寸和方框模型 387

26.2.2 Canvas布局 388

26.2.3 WrapPanel布局 389

26.2.4 StackPanel布局 389

26.2.5 UniformGrid布局 389

26.2.6 Grid布局 390

26.2.7 DockPanel布局 392

26.3 WPF控件 392

26.3.1 Border 393

26.3.2 Button 393

26.3.3 CheckBox控件 393

26.3.4 ComboBox控件 393

26.3.5 ContentControl控件 393

26.3.6 DockPanel控件 394

26.3.7 DocumentViewer控件 394

26.3.8 Ellipse控件 394

26.3.9 Expander控件 395

26.3.10 Frame控件 395

26.3.11 Grid控件 395

26.3.12 GridSplitter控件 395

26.3.13 GroupBox控件 396

26.3.14 Image控件 396

26.3.15 Label控件 396

26.3.16 ListBox控件 396

26.3.17 ListView控件 396

26.3.18 MediaElement控件 396

26.3.19 Menu控件 397

26.3.20 PasswordBox控件 397

26.3.21 ProgressBar控件 397

26.3.22 RadioButton控件 397

26.3.23 Rectangle控件 398

26.3.24 RichTextBox控件 398

26.3.25 ScrollBar控件 398

26.3.26 ScrollViewer控件 398

26.3.27 Separator控件 399

26.3.28 Slider控件 399

26.3.29 StackPanel控件 399

26.3.30 StatusBar控件 399

26.3.31 Tab控件 399

26.3.32 TextBlock控件 400

26.3.33 TextBox控件 400

26.3.34 ToolBar控件 400

26.3.35 ToolBarPanel控件 400

26.3.36 ToolBarTray控件 400

26.3.37 TreeView控件 401

26.3.38 UniformGrid控件 401

26.3.39 ViewBox控件 401

26.3.40 WindowsFormsHost控件 401

26.3.41 WrapPanel控件 402

26.4 事件处理 402

26.5 数据绑定 403

26.5.1 数据绑定概述 403

26.5.2 显示数据列表 403

26.6 使用样式 406

26.7 小结 407

第六部分 设计Web用户界面第27章 使用ASP.NET创建Web应用程序 410

27.1 Web应用程序模型 410

27.1.1 ASP.NET页面请求概述 410

27.1.2 C#代码驻留之地 411

27.1.3 可伸缩性和状态管理从何而来 411

27.1.4 如何理解直观性能 412

27.1.5 我为何使用ASP.NET 412

27.2 使用VS2008创建ASP.NET项目 412

27.3 ASP.NET页入门 413

27.3.1 Web窗体的构成 413

27.3.2 代码隐藏与页面生命周期 415

27.4 控件 417

27.4.1 服务器控件 417

27.4.2 HTML控件 418

27.5 状态管理 419

27.5.1 Application全局状态 419

27.5.2 在缓存中保存可更新信息 419

27.5.3 保存单一请求状态 420

27.5.4 发布Cookie 420

27.5.5 特定用户信息与Session状态 421

27.5.6 理解ViewState中的页面状态 421

27.5.7 页面重用与母版页和自定义控件 421

27.6 导航 424

27.6.1 用web.sitemap定义站点布局 425

27.6.2 Menu控件导航 425

27.6.3 实现TreeView 426

27.6.4 使用SiteMapPath添加面包屑导航 428

27.7 网站主题 428

27.7.1 设置主题 428

27.7.2 创建皮肤 428

27.7.3 创建样式表 430

27.8 网站安全 430

27.9 数据绑定 431

27.9.1 设置业务对象 431

27.9.2 简单数据绑定 432

27.9.3 ObjectDataSource与数据绑定 432

27.10 小结 434

第28章 用ASP.NET AJAX加强Web应用程序的交互性 435

28.1 何为AJAX 435

28.2 设置ASP.NET AJAX站点 436

28.3 AJAX页面生命周期 437

28.4 加载自定义脚本库 438

28.5 ASP.NET AJAX控件 439

28.5.1 UpdatePanel控件 439

28.5.2 UpdateProgress控件 440

28.5.3 Timer控件 441

28.6 通过JavaScript访问控件 441

28.6.1 使用JavaScript简化控件ID访问 442

28.6.2 访问已损坏的ASP.NET控件ID 443

28.7 通过ASP.NET AJAX调用Web服务 446

28.7.1 使用Web服务和AJAX的原因与取舍 446

28.7.2 使用AJAX和Web服务 447

28.8 小结 449

第29章 用Silverlight精心制作丰富的Web应用程序 451

29.1 什么让Silverlight运作 451

29.1.1 WPF与XAML从何而来 451

29.1.2 Silverlight如何与ASP.NET、JavaScript和AJAX关联 452

29.2 在VS2008中启动Silverlight项目 452

29.2.1 创建Silverlight项目 452

29.2.2 理解Silverlight项目的各个部分 453

29.3 用C#处理Silverlight事件 455

29.3.1 给Silverlight控件事件添加C#处理程序 456

29.3.2 在Silverlight中处理数据 456

29.4 媒体播放 458

29.4.1 给WebForm添加MediaPlayer 459

29.4.2 用C#操作MediaElement 459

29.5 动画UI组件 461

29.6 小结 462

第七部分 使用.NET技术通信第30章 使用.NET网络通信技术 464

30.1 实现套接字 464

30.1.1 套接字服务器 464

30.1.2 套接字客户端 467

30.2 与HTTP协作 470

30.3 执行FTP文件传输 471

30.3.1 将文件上载到FTP服务器 472

30.3.2 从FTP服务器获取文件 473

30.4 发送SMTP邮件 475

30.4.1 快速发送邮件的方法 475

30.4.2 发送带有附件的邮件 475

30.5 小结 476

第31章 创建Windows服务应用程序 477

31.1 在VS2008中创建Windows服务项目 477

31.1.1 运行Windows服务向导 477

31.1.2 检查Windows服务项目中的文件 477

31.2 编写Windows服务 480

31.2.1 可用的Windows服务方法覆写 480

31.2.2 实现Windows服务方法覆写 481

31.2.3 配置Windows服务 483

31.3 安装Windows服务 483

31.3.1 配置ServiceProcess-Installer 484

31.3.2 配置ServiceInstaller 484

31.3.3 部署Windows服务 485

31.4 创建一个控制器与Windows服务进行通信 485

31.5 小结 487

第32章 Remoting 488

32.1 基本的Remoting 488

32.1.1 Remoting服务器 489

32.1.2 Remoting客户端 491

32.1.3 Remoting安装 492

32.2 通道 496

32.3 生存期管理 498

32.4 小结 500

第33章 编写传统ASMX Web服务 501

33.1 Web服务基础 501

33.1.1 Web服务技术 501

33.1.2 一个基本的Web服务 502

33.1.3 查看Web服务信息 503

33.2 使用Web服务 506

33.3 小结 509

第34章 使用WCF创建Web服务 510

34.1 在VS2008中创建WCF应用程序 510

34.2 创建Web服务契约 511

34.2.1 创建WCF Web服务接口 512

34.2.2 声明ServiceContract特性 513

34.2.3 声明OperationContract特性 514

34.2.4 构建数据契约 514

34.3 实现Web服务逻辑 515

34.4 配置Web服务 517

34.4.1 service元素 518

34.4.2 endpoint元素 518

34.4.3 behavior元素 518

34.5 使用Web服务 519

34.6 创建服务引用 519

34.7 编写客户端代码调用Web服务 520

34.8 小结 521

第八部分 .NET应用程序架构设计示例第35章 使用Visual Studio 2008类设计器 524

35.1 可视化代码 524

35.1.1 开始查看对象 524

35.1.2 查看关联、继承和接口 527

35.2 使用类设计器创建对象模型 528

35.3 小结 532

第36章 C#中的设计模式样例 534

36.1 设计模式概览 534

36.2 迭代器模式 534

36.2.1 实现IEnumerable 535

36.2.2 实现IEnumerator 536

36.2.3 在客户代码中使用迭代器 539

36.2.4 foreach循环中的奇特行为 540

36.2.5 使用C#迭代器简化迭代器模式 543

36.3 实现代理模式 543

36.3.1 一个代理模式的例子 544

36.3.2 使用代理对象 546

36.4 实现模板模式 547

36.4.1 在.NET框架中模板模式是如何使用的 547

36.4.2 实现模板模式的一个例子 547

36.5 小结 551

第37章 创建N级/层系统 552

37.1 潜在的拖放问题 552

37.1.1 5分钟创建RAD应用程序 552

37.1.2 危害只是一丁点的生产力吗 553

37.2 N级/N层介绍 554

37.2.1 早期的应用程序架构 554

37.2.2 N层架构 554

37.2.3 N级架构 555

37.2.4 架构不应该过于理论 556

37.3 N层架构的示例 556

37.3.1 N层/一个程序集架构 556

37.3.2 N层/多个程序集架构 562

37.4 小结 564

第38章 使用WF自动化逻辑 565

38.1 开启工作流项目 565

38.2 创建顺序工作流 565

38.2.1 创建工作流 566

38.2.2 执行工作流 569

38.3 创建状态工作流 569

38.3.1 医院预约工作流概览 569

38.3.2 创建状态工作流 570

38.3.3 从主机向工作流通信:实现ExternalDataExchange-Service 571

38.3.4 处理状态工作流中的事件 575

38.4 小结 578

第九部分 体验更多的.NET框架类库第39章 进程和线程管理 580

39.1 .NET进程支持 580

39.1.1 启动新进程 581

39.1.2 使用已有进程 583

39.2 多线程概述 584

39.2.1 创建新线程 584

39.2.2 用更简洁的方式来运行线程中的代码 585

39.2.3 向线程传递参数 585

39.2.4 使用线程池 585

39.3 线程同步 586

39.3.1 C# lock语句 586

39.3.2 深入lock:Monitor类 587

39.3.3 平衡读取器线程和编写器线程间的访问 588

39.4 小结 589

第40章 本地化和国际化 590

40.1 资源文件 590

40.1.1 创建资源文件 590

40.1.2 编写资源文件 592

40.1.3 读取资源文件 593

40.1.4 转换资源文件 594

40.1.5 创建图形资源 595

40.2 多区域设置 599

40.2.1 实现多区域设置 599

40.2.2 查找资源 603

40.3 小结 604

第41章 互操作(P/Invoke和COM)与不安全代码 605

41.1 不安全代码 605

41.1.1 不安全代码是什么意思 606

41.1.2 指针的用途 606

41.1.3 sizeof()运算符 609

41.1.4 栈分配运算符 609

41.1.5 fixed语句 611

41.2 平台调用 613

41.3 .NET与COM通信 614

41.3.1 早绑定COM组件调用 614

41.3.2 晚绑定COM组件调用 616

41.4 将.NET组件作为COM组件 616

41.5 .NET对COM+服务的支持 618

41.5.1 事务 619

41.5.2 JIT激活 620

41.5.3 对象池 621

41.5.4 其他服务 621

41.6 小结 622

第42章 使用System.Diagnostics中的类型诊断应用 623

42.1 简单调试 624

42.2 条件调试 625

42.3 运行时跟踪 627

42.4 使用断言 628

42.5 访问内置的性能计数器 629

42.6 实现计时器 635

42.7 构建自定义性能计数器 636

42.8 使用采样分析性能 645

42.9 小结 653

第十部分 部署代码 656

第43章 程序集和版本控制 656

43.1 程序集内部构成 656

43.1.1 清单 657

43.1.2 特性 657

43.2 程序集功能 659

43.2.1 标识 659

43.2.2 范围 659

43.2.3 版本控制 659

43.2.4 安全性 660

43.3 配置 660

43.3.1 启动配置 661

43.3.2 运行时配置 661

43.4 部署 663

43.5 小结 663

第44章 代码安全 664

44.1 基于代码的安全 664

44.1.1 证据 664

44.1.2 权限 665

44.1.3 代码组 665

44.1.4 安全策略级别 666

44.1.5 权限请求 667

44.1.6 实现安全策略 669

44.2 基于角色的安全 671

44.3 安全实用工具 672

44.4 小结 673

第45章 创建Visual Studio 2008安装项目 674

45.1 运行VS2008安装项目向导程序 674

45.2 更多的安装配置 676

45.2.1 文件系统配置 677

45.2.2 创建注册表设置 677

45.2.3 文件类型 678

45.2.4 用户界面 678

45.2.5 启动条件 679

45.2.6 自定义操作 679

45.3 小结 680

第46章 部署桌面应用程序 681

46.1 通过ClickOnce部署 681

46.2 配置ClickOnce 683

46.3 小结 684

第47章 发布Web应用程序 685

47.1 剖析Web应用程序 685

47.2 Web服务器安装 685

47.3 虚拟目录安装 686

47.4 Web服务器部署 687

47.5 从VS2008中发布Web应用程序 688

47.6 小结 689

第十一部分 附录 692

附录A 编译程序 692

附录B 获取.NET框架帮助 694