图书介绍

C#与.NET 3.0高级程序设计 特别版PDF|Epub|txt|kindle电子书版本下载

C#与.NET 3.0高级程序设计 特别版
  • (美)特罗尔森(Troelsen Andrew)著 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:7115168075
  • 出版时间:2008
  • 标注页数:942页
  • 文件大小:140MB
  • 文件页数:975页
  • 主题词:C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

C#与.NET 3.0高级程序设计 特别版PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第一部分 C#和.NET平台简介2

第1章 .NET之道2

1.1 了解.NET之前的世界2

1.1.1 C/Win32 API程序员的生活2

1.1.2 C++/MFC程序员的生活2

1.1.3 Visual Basic 6.0程序员的生活3

1.1.4 Java/J2EE程序员的生活3

1.1.5 COM程序员的生活3

1.1.6 Windows DNA程序员的生活4

1.2 .NET解决方案4

1.3 .NET平台构造块(CLR、CTS和CLS)简介5

1.4 C#的优点6

1.5 其他支持.NET的编程语言6

1.6 .NET程序集概览7

1.7 单文件程序集和多文件程序集8

1.8 CIL的作用9

1.8.1 CIL的好处11

1.8.2 将CIL编译成特定平台的指令11

1.9 .NET类型元数据的作用11

1.10 程序集清单的作用12

1.11 理解CTS12

1.11.1 CTS类类型12

1.11.2 CTS结构类型13

1.11.3 CTS接口类型13

1.11.4 CTS枚举类型14

1.11.5 CTS委托类型14

1.11.6 CTS类型成员14

1.11.7 内建的CTS数据类型14

1.12 理解CLS15

1.13 理解CLR16

1.14 程序集/命名空间/类型的区别18

1.14.1 以编程方式访问命名空间20

1.14.2 引用外部程序集21

1.15 使用ildasm.exe21

1.15.1 查看CIL代码22

1.15.2 查看类型元数据22

1.15.3 查看程序集元数据22

1.16 部署.NET运行库23

1.17 .NET的平台无关性23

1.18 小结24

第2章 构建C#应用程序25

2.1 安装.NET Framework 2.0 SDK25

2.2 C#命令行编译器(csc.exe)26

2.2.1 配置C#命令行编译器26

2.2.2 配置其他.NET命令行工具27

2.3 使用csc.exe构建C#应用程序27

2.3.1 引用外部程序集28

2.3.2 使用csc.exe编译多个源文件29

2.3.3 引用多个外部程序集30

2.4 使用csc.exe响应文件30

2.5 命令行调试器(cordbg.exe)31

2.6 使用TextPad构建.NET应用程序32

2.6.1 启用C#关键字着色32

2.6.2 配置*.cs文件过滤器33

2.6.3 与csc.exe关联33

2.6.4 将运行命令与菜单项相关联34

2.6.5 启用C#代码片段35

2.7 使用SharpDevelop构建.NET应用程序35

2.7.1 SharpDevelop36

2.7.2 Project Scout和Classes Scout36

2.7.3 Assembly Scout37

2.7.4 Windows窗体设计器38

2.8 使用Visual C# 2005 Express构建.NET应用程序38

2.9 使用Visual Studio 2005构建.NET应用程序39

2.9.1 Visual Studio 200539

2.9.2 Solution Explorer工具40

2.9.3 Class View工具41

2.9.4 Code Definition窗口41

2.9.5 Object Browser工具41

2.9.6 集成对代码重构的支持42

2.9.7 代码扩展和围绕技术43

2.9.8 可视化Class Designer43

2.9.9 对象测试平台45

2.9.10 集成的帮助系统46

2.10 其他.NET开发工具47

2.11 小结47

第二部分 C#编程语言50

第3章 C#语言基础50

3.1 剖析一个简单的C#程序50

3.1.1 Main()方法的其他形式51

3.1.2 处理命令行参数51

3.1.3 使用Visual Studio 2005指定命令行参数52

3.2 有趣的题外话:System.Environment类53

3.3 定义类并创建对象53

3.3.1 构造函数的作用54

3.3.2 是内存泄露吗55

3.3.3 定义“应用程序对象”56

3.4 System.Console类57

3.4.1 使用Console类进行基本的输入和输出57

3.4.2 格式化控制台输出58

3.4.3 .NET字符串格式化标志58

3.5 设置成员的可见性60

3.6 类成员变量的默认值61

3.7 成员变量的初始化语法62

3.8 定义常量数据63

3.9 定义只读字段64

3.10 static关键字66

3.10.1 静态方法66

3.10.2 静态数据67

3.10.3 静态构造函数68

3.10.4 静态类69

3.11 方法参数修饰符70

3.11.1 默认的参数传递行为71

3.11.2 out修饰符71

3.11.3 ref修饰符72

3.11.4 params修饰符73

3.12 迭代结构73

3.12.1 for循环73

3.12.2 foreach循环74

3.12.3 while和do/while循环结构74

3.13 判断结构与关系/相等运算符75

3.13.1 if/else语句75

3.13.2 switch语句76

3.14 值类型和引用类型77

3.14.1 值类型、引用类型和赋值运算符78

3.14.2 包含引用类型的值类型79

3.14.3 按值传递引用类型81

3.14.4 按引用传递引用类型82

3.14.5 值类型和引用类型:最后的细节82

3.15 装箱与拆箱操作83

3.15.1 实用的装箱和拆箱示例84

3.15.2 拆箱自定义的值类型85

3.16 使用.NET枚举86

3.17 最重要的类:System.Object89

3.18 重写System.Object的一些默认行为92

3.18.1 重写System.Object ToString()92

3.18.2 重写System.Object Equals()92

3.18.3 重写System.Object GetHashCode()93

3.18.4 测试重写的成员94

3.18.5 System.Object的静态成员95

3.19 系统数据类型(和C#简化符号)95

3.19.1 数值数据类型的实验97

3.19.2 System.Boolean的成员97

3.19.3 System.Char的成员98

3.19.4 从字符串数据中解析数值98

3.19.5 System.DateTime和System.TimeSpan99

3.20 System.String数据类型100

3.20.1 基本的字符串操作100

3.20.2 转义字符101

3.20.3 使用C#的逐字字符串102

3.21 System.Text.StringBuilder的作用102

3.22 .NET数组类型103

3.22.1 数组作为参数(和返回值)104

3.22.2 使用多维数组104

3.22.3 System.Array基类106

3.23 C#的可空类型107

3.23.1 使用可空类型107

3.23.2 ??运算符108

3.24 定义自定义命名空间108

3.24.1 类型的完全限定名110

3.24.2 使用别名定义命名空间111

3.24.3 创建嵌套的命名空间112

3.24.4 Visual Studio 2005中的“默认命名空间”113

3.25 小结113

第4章 C# 2.0面向对象编程114

4.1 C#的类类型114

4.1.1 方法重载116

4.1.2 使用C#的this进行自引用116

4.1.3 定义类的公共接口118

4.2 回顾OOP的支柱118

4.2.1 封装119

4.2.2 继承119

4.2.3 多态120

4.3 第一个支柱:C#的封装支持121

4.3.1 使用传统的访问方法和修改方法执行封装122

4.3.2 另一种形式的封装:类属性122

4.3.3 C#属性的内部表示124

4.3.4 控制属性get/set语句的可见性级别126

4.3.5 只读和只写属性126

4.3.6 静态属性126

4.4 第二个支柱:C#的继承支持127

4.4.1 使用base控制基类的创建128

4.4.2 关于多基类130

4.4.3 保护家族的秘密:protected关键字130

4.4.4 防止继承:密封类130

4.5 为包含/委托编程131

4.6 第三个支柱:C#的多态支持134

4.6.1 virtual和override关键字134

4.6.2 再谈sealed关键字135

4.6.3 抽象类136

4.6.4 强制多态活动:抽象方法137

4.6.5 成员隐藏139

4.7 C#的类型转换规则140

4.7.1 确定Employee的类型141

4.7.2 数值类型转换142

4.8 C#的分部类型142

4.9 通过XML生成C#源代码的文档144

4.9.1 XML代码注释格式化字符146

4.9.2 转换XML代码注释146

4.10 小结146

第5章 对象的生命周期147

5.1 类、对象和引用147

5.2 对象生命周期的基础148

5.3 应用程序根的作用150

5.4 对象的代151

5.5 System.GC类型152

5.6 构建可终结对象155

5.6.1 重写System.Object Finalize()155

5.6.2 终结过程的细节157

5.7 构建可处置对象157

5.8 构建可终结类型和可处置类型159

5.9 小结161

第6章 结构化异常处理162

6.1 错误、bug与异常162

6.2 .NET异常处理的作用163

6.2.1 .NET异常处理的四要素163

6.2.2 System.Exception基类164

6.3 最简单的例子165

6.3.1 引发普通的异常166

6.3.2 捕获异常167

6.4 配置异常的状态168

6.4.1 TargetSite属性168

6.4.2 StackTrace属性169

6.4.3 HelpLink属性169

6.4.4 Data属性170

6.5 系统级异常(System.SystemException)171

6.6 应用程序级异常(System.ApplicationException)171

6.6.1 构建自定义异常,第一部分172

6.6.2 构建自定义异常,第二部分173

6.6.3 构建自定义异常,第三部分173

6.7 处理多个异常174

6.7.1 通用的catch语句176

6.7.2 再次引发异常176

6.7.3 内部异常177

6.8 finally块178

6.9 谁在引发什么异常178

6.10 未处理异常的后果179

6.11 使用Visual Studio 2005调试未处理的异常180

6.12 小结180

第7章 接口与集合181

7.1 使用C#定义接口181

7.2 使用C#实现接口182

7.3 接口与抽象基类的对比183

7.4 在对象级别调用接口成员184

7.4.1 获取接口引用:as关键字184

7.4.2 获取接口引用:is关键字185

7.5 接口作为参数185

7.6 接口作为返回值187

7.7 接口类型数组187

7.8 显式接口实现188

7.9 构建接口层次结构190

7.10 使用Visual Studio 2005实现接口192

7.11 构建可枚举类型(IEnumerable和IEnumerator)193

7.12 构建可克隆的对象(ICloneable)196

7.13 构建可比较的对象(IComparable)199

7.13.1 指定多个排序的顺序(IComparer)201

7.13.2 自定义属性、自定义排序类型202

7.14 System.Collections命名空间的接口203

7.14.1 ICollection接口的作用203

7.14.2 IDictionary接口的作用204

7.14.3 IDictionaryEnumerator接口的作用204

7.14.4 IList接口的作用204

7.15 System.Collections命名空间中的类205

7.15.1 操作ArrayList类型205

7.15.2 操作Queue类型206

7.15.3 操作Stack类型207

7.16 System.Collections.Specialized命名空间208

7.17 小结208

第8章 回调接口、委托与事件209

8.1 回调接口209

8.2 .NET委托类型212

8.3 使用C#定义委托213

8.4 System.MulticastDelegate与System.Delegate基类215

8.5 最简单的委托示例216

8.6 使用委托改造Car类型218

8.7 更复杂的委托示例222

8.7.1 委托作为参数223

8.7.2 分析委托代码225

8.8 委托协变226

8.9 C#事件228

8.9.1 揭开事件的神秘面纱229

8.9.2 监听传入的事件230

8.9.3 使用Visual Studio 2005简化事件注册231

8.9.4 严谨规范的事件231

8.10 C#匿名方法233

8.11 C#方法组转换235

8.12 小结236

第9章 高级C#类型构造技术237

9.1 构建自定义索引器237

9.2 类型索引器的内部表示方式239

9.3 索引器:最后的细节240

9.4 运算符重载240

9.5 重载二元运算符241

9.6 重载一元运算符243

9.7 重载相等于运算符243

9.8 重载比较运算符244

9.9 重载运算符的内部表示形式245

9.10 在不支持重载运算符的语言中使用重载运算符246

9.11 运算符重载的最后思考247

9.12 自定义类型转换247

9.12.1 回顾:数值转换247

9.12.2 回顾:相关的类类型间的转换247

9.13 创建自定义转换例程248

9.14 定义隐式转换例程250

9.15 自定义转换例程的内部表示251

9.16 C#的高级关键字252

9.16.1 checked关键字252

9.16.2 unchecked关键字254

9.16.3 指针类型254

9.16.4 sizeof关键字259

9.17 C#预处理指令260

9.17.1 指定代码区域260

9.17.2 条件代码编译261

9.18 小结262

第10章 泛型263

10.1 再论装箱、拆箱和System.Object之间的关系263

10.2 装箱/拆箱操作的问题264

10.2.1 类型安全与强类型集合264

10.2.2 装箱与强类型集合266

10.3 System.Collections.Generic命名空间268

10.4 创建泛型方法271

10.5 创建泛型结构(或类)273

10.6 创建自定义泛型集合275

10.6.1 使用where约束类型参数276

10.6.2 运算符约束的不足278

10.7 创建泛型基类279

10.8 创建泛型接口280

10.9 创建泛型委托281

10.9.1 在.NET 1.1下模拟泛型委托282

10.9.2 嵌套委托相关简介282

10.10 小结283

第三部分 .NET程序集编程286

第11章 .NET程序集入门286

11.1 .NET程序集的作用286

11.1.1 程序集促进代码重用286

11.1.2 程序集确定类型边界287

11.1.3 程序集是可版本化的单元287

11.1.4 程序集是自描述的287

11.1.5 程序集是可配置的287

11.2 .NET程序集的格式287

11.2.1 Win32文件首部288

11.2.2 CLR文件首部288

11.2.3 CIL代码、类型元数据和程序集清单289

11.2.4 可选的程序集资源289

11.2.5 单文件程序集和多文件程序集289

11.3 构建和使用单文件程序集291

11.3.1 清单293

11.3.2 CIL294

11.3.3 类型元数据295

11.3.4 构建C#客户端应用程序295

11.3.5 构建Visual Basic.NET客户端应用程序296

11.3.6 实现跨语言继承297

11.4 构建和使用多文件程序集298

11.4.1 ufo.netmodule文件299

11.4.2 airvehicles.dll文件299

11.4.3 使用多文件程序集299

11.5 私有程序集300

11.5.1 私有程序集的标识300

11.5.2 探测过程301

11.5.3 配置私有程序集301

11.5.4 配置文件和Visual Studio 2005303

11.5.5 .NET Framework 2.0配置工具简介303

11.6 共享程序集304

11.6.1 强名称305

11.6.2 为CarLibrary.dll赋予强名称306

11.6.3 使用Visual Studio 2005为程序集赋予强名称307

11.6.4 在GAC中安装和移除共享程序集307

11.6.5 延迟签名的作用308

11.7 使用共享程序集308

11.8 配置共享程序集310

11.8.1 冻结当前的共享程序集310

11.8.2 构建共享程序集2.0.0.0版本311

11.8.3 动态重定向到共享程序集的特定版本312

11.8.4 再次研究.NET Framework 2.0配置工具313

11.9 研究GAC的内部结构313

11.10 发行者策略程序集315

11.11 〈codeBase〉元素316

11.12 System.Configuration命名空间317

11.13 机器配置文件318

11.14 程序集绑定总体流程图318

11.15 小结319

第12章 类型反射、晚期绑定和基于特性的编程320

12.1 类型元数据的必要性320

12.1.1 查看(部分)EngineState枚举的元数据321

12.1.2 查看(部分)Car类型的元数据321

12.1.3 研究TypeRef322

12.1.4 记录定义的程序集323

12.1.5 记录引用的程序集323

12.1.6 记录字符串字面量323

12.2 反射324

12.2.1 System.Type类324

12.2.2 使用System.Object.GetType()得到Type引用325

12.2.3 使用System.Type.GetType()得到Type引用325

12.2.4 使用typeof()得到Type引用326

12.3 构建自定义的元数据查看器326

12.3.1 反射方法326

12.3.2 反射字段和属性327

12.3.3 反射实现的接口327

12.3.4 显示其他信息327

12.3.5 实现Main()328

12.3.6 反射方法参数和返回值329

12.4 动态加载程序集330

12.5 反射共享程序集332

12.6 晚期绑定333

12.6.1 System.Activator类333

12.6.2 调用没有参数的方法334

12.6.3 调用有参数的方法335

12.7 特性编程335

12.7.1 特性的使用者336

12.7.2 在C#中使用预定义特性336

12.7.3 为特性指定构造参数338

12.7.4 Obsolete特性338

12.7.5 C#特性简化符号338

12.8 构建自定义特性339

12.8.1 应用自定义特性339

12.8.2 限制特性使用340

12.9 程序集级别(和模块级别)特性341

12.10 使用早期绑定反射特性342

12.11 使用晚期绑定反射特性342

12.12 反射、晚期绑定和自定义特性的使用背景343

12.13 构建可扩展的应用程序344

12.13.1 构建CommonSnappable-Types.dll344

12.13.2 构建C#插件345

12.13.3 构建Visual Basic.NET插件345

12.13.4 构建可扩展的Windows窗体应用程序346

12.14 小结348

第13章 进程、应用程序域、上下文和CLR宿主349

13.1 回顾传统的Win32进程349

13.2 .NET平台下与进程进行交互351

13.2.1 列举运行中的进程352

13.2.2 研究特定的进程352

13.2.3 研究进程的线程集合353

13.2.4 研究进程中的模块集合354

13.2.5 以编程方式启动或结束进程355

13.3 .NET应用程序域356

13.3.1 列举进程中的应用程序域357

13.3.2 以编程方式创建新的应用程序域358

13.3.3 以编程方式卸载应用程序域360

13.4 对象上下文边界361

13.4.1 上下文灵活和上下文绑定类型361

13.4.2 定义上下文绑定对象362

13.4.3 研究对象的上下文363

13.5 进程、应用程序域和上下文小结364

13.6 承载CLR364

13.6.1 CLR的并行执行365

13.6.2 加载特定的CLR版本366

13.6.3 其他的CLR宿主366

13.7 小结367

第14章 构建多线程应用程序368

14.1 进程、应用程序域、上下文及线程之间的关系368

14.2 .NET委托的简短回顾369

14.3 委托的异步天性371

14.3.1 BeginInvoke()和EndInvoke()方法371

14.3.2 System.IAsyncResult接口372

14.4 异步调用方法372

14.4.1 同步调用线程373

14.4.2 AsyncCallback委托的作用374

14.4.3 AsyncResult类的作用375

14.4.4 传递和接收自定义状态数据375

14.5 System.Threading命名空间376

14.6 System.Threading.Thread类377

14.6.1 获得当前线程的统计信息377

14.6.2 Name属性378

14.6.3 Priority属性378

14.7 以编程方式创建次线程379

14.7.1 使用ThreadStart委托379

14.7.2 使用Parameterized-ThreadStart委托381

14.7.3 前台线程和后台线程382

14.8 并发问题383

14.8.1 使用C#的lock关键字进行同步385

14.8.2 使用System.Threading.Monitor类型进行同步386

14.8.3 使用System.Threading.Interlocked类型进行同步387

14.8.4 使用[Synchronization]进行同步388

14.9 使用Timer Callback编程388

14.10 CLR线程池390

14.11 小结391

第15章 CIL和动态程序集的作用392

15.1 CIL编程的本质392

15.2 研究CIL指令、特性和操作码393

15.2.1 CIL指令的作用393

15.2.2 CIL特性的作用393

15.2.3 CIL操作码的作用393

15.2.4 区别CIL操作码和CIL助记符394

15.3 入栈和出栈:CIL基于栈的本质394

15.4 正反向工程395

15.4.1 CIL代码标签的作用397

15.4.2 与CIL交互:修改*.il文件398

15.4.3 使用ilasm.exe编译CIL代码399

15.4.4 使用SharpDevelop编译CIL代码400

15.4.5 使用ILIDE#编译CIL代码400

15.4.6 peverify.exe的作用401

15.5 CIL指令和特性401

15.5.1 在CIL中指定外部引用程序集401

15.5.2 在CIL中定义当前程序集401

15.5.3 在CIL中定义命名空间402

15.5.4 在CIL中定义类类型402

15.5.5 在CIL中定义和实现接口403

15.5.6 在CIL中定义结构404

15.5.7 在CIL中定义枚举404

15.5.8 编译CILTypes.il文件404

15.6 .NET基类库、C#和CIL数据类型的映射405

15.7 在CIL中定义成员405

15.7.1 在CIL中定义数据字段405

15.7.2 在CIL中定义类型的构造函数406

15.7.3 在CIL中定义属性406

15.7.4 定义成员参数407

15.8 剖析CIL操作码407

15.8.1 了解.maxstack指令409

15.8.2 在CIL中声明局部变量409

15.8.3 在CIL中映射参数到局部变量410

15.8.4 隐式this引用410

15.8.5 在CIL中使用循环结构411

15.9 使用CIL构建.NET程序集411

15.9.1 构建CILCars.dll412

15.9.2 构建CILCarClient.exe414

15.10 动态程序集415

15.10.1 System.Reflection.Emit命名空间416

15.10.2 System.Reflection.Emit.ILGenerator的作用416

15.10.3 产生动态的程序集417

15.10.4 产生程序集和模块集419

15.10.5 ModuleBuilder类型的作用420

15.10.6 产生HelloClass类型和字符串成员变量420

15.10.7 产生构造函数421

15.10.8 产生HelloWorld()方法422

15.10.9 使用动态产生的程序集422

15.11 System.CodeDom简单说明423

15.12 小结423

第四部分 使用.NET库编程426

第16章 System.IO命名空间426

16.1 研究System.IO命名空间426

16.2 Directory(Info)和File(Info)类型427

16.3 使用DirectoryInfo类型428

16.3.1 FileAttributes枚举429

16.3.2 使用DirectoryInfo类型列出文件429

16.3.3 使用DirectoryInfo类型创建子目录430

16.4 使用Directory类型431

16.5 使用DriveInfo类类型432

16.6 使用FileInfo类433

16.6.1 FileInfo.Create()方法433

16.6.2 FileInfo.Open()方法434

16.6.3 FileInfo.OpenRead()和FileInfo.OpenWrite()方法435

16.6.4 FileInfo.OpenText()方法435

16.6.5 FileInfo.CreateText()和FileInfo.AppendText()方法435

16.7 使用File类型436

16.8 Stream抽象类437

16.9 使用StreamWriter和StreamReader类型440

16.9.1 写文本文件440

16.9.2 从文本文件读441

16.9.3 直接创建StreamWriter/StreamReader类型442

16.10 使用StringWriter和StringReader442

16.11 使用BinaryWriter和BinaryReader443

16.12 以编程方式“观察”文件445

16.13 实现异步文件I/O操作447

16.14 小结448

第17章 对象序列化449

17.1 对象序列化449

17.2 为序列化配置对象451

17.3 选择序列化格式化程序452

17.3.1 IFormatter和IRemoting-Formatting接口452

17.3.2 在格式化程序中的类型保真453

17.4 使用BinaryFormatter序列化对象453

17.5 使用SoapFormatter序列化对象455

17.6 使用XmlSerializer序列化对象456

17.7 持久化对象集合458

17.8 自定义序列化过程459

17.8.1 深入了解对象序列化460

17.8.2 使用ISerializable自定义序列化461

17.8.3 使用特性自定义序列化462

17.9 可序列化对象的版本处理463

17.10 小结465

第18章 .NET远程处理层466

18.1 定义.NET远程处理466

18.2 .NET远程处理命名空间466

18.3 .NET远程处理框架467

18.3.1 代理和消息468

18.3.2 信道469

18.3.3 .NET格式化程序的作用469

18.3.4 综合讨论469

18.3.5 扩展默认管道的简单介绍470

18.4 .NET远程处理数据交换的术语470

18.4.1 对象封送方式:MBR还是MBV470

18.4.2 选择MBR的激活类型:WKO还是CAO472

18.4.3 WKO类型的状态配置:单例还是单一调用473

18.4.4 MBR对象类型特性小结473

18.5 .NET远程处理项目的基本部署473

18.6 构建第一个分布式应用程序474

18.6.1 构建普通程序集474

18.6.2 构建服务器端程序集475

18.6.3 建立SimpleRemoteObject-Client.exe程序集476

18.6.4 测试远程处理应用程序477

18.7 ChannelServices类型477

18.8 RemotingConfiguration类型478

18.9 WKO类型激活模式479

18.10 把服务器部署成远程机器480

18.11 利用TCP通道480

18.12 简单谈谈IpcChannel481

18.13 远程处理配置文件481

18.13.1 构建服务器端*.config文件482

18.13.2 构建客户端*.config文件483

18.14 使用MBV对象484

18.14.1 构建普通程序集484

18.14.2 构建服务器端程序集485

18.14.3 构建客户端程序集486

18.15 客户端激活的对象487

18.16 CAO/WKO-Singleton对象基于租约的生存期489

18.16.1 默认的租约行为489

18.16.2 改变默认租约特性491

18.16.3 服务器端租约调整492

18.16.4 客户端租约调整492

18.17 服务器端(和客户端)租约主办方机制493

18.18 远程对象的其他宿主494

18.18.1 使用Windows服务承载远程对象494

18.18.2 使用IIS承载远程对象497

18.19 异步远程处理498

18.20 小结500

第19章 使用System.Windows.Forms构建更好的窗体501

19.1 System.Windows.Forms命名空间概述501

19.2 使用Windows窗体类型502

19.2.1 手动创建主窗口502

19.2.2 重视分离关注点503

19.3 Application类的作用504

19.3.1 Application类的使用505

19.3.2 System.EventHandler委托506

19.4 剖析Form506

19.5 Control类的功能507

19.5.1 Control类的使用509

19.5.2 响应MouseMove事件509

19.5.3 检测被单击的鼠标键510

19.5.4 响应键盘事件511

19.6 Form类的功能512

19.7 使用Visual Studio 2005构建窗口应用程序514

19.7.1 启用过时的控件515

19.7.2 研究Visual Studio 2005 Windows窗体项目516

19.7.3 在设计时处理事件517

19.7.4 Program类517

19.7.5 被自动引用的程序集518

19.8 MenuStrips和ContextMenuStrips的使用518

19.8.1 向MenuStrip添加TextBox520

19.8.2 创建上下文菜单521

19.8.3 选择菜单项523

19.9 使用StatusStrip524

19.9.1 设计菜单系统524

19.9.2 设计StatusStrip525

19.9.3 用Timer类型工作527

19.9.4 切换显示527

19.9.5 显示菜单选择提示符528

19.9.6 建立“Ready”状态528

19.10 使用ToolStrip工作529

19.11 构建MDI运用程序534

19.11.1 构建父窗体534

19.11.2 构建子窗体535

19.11.3 复制子窗体535

19.12 小结536

第20章 使用GDI+绘制图形537

20.1 GDI+命名空间概述537

20.2 System.Drawing命名空间概述538

20.3 System.Drawing实用类型538

20.3.1 Point(F)类型539

20.3.2 Rectangle(F)类型539

20.3.3 Region类540

20.4 Graphics类541

20.5 Paint会话542

20.5.1 使窗体的客户区域失效543

20.5.2 在Paint事件处理程序外获取Graphics对象544

20.5.3 关于Graphics对象的释放545

20.6 GDI+坐标系统546

20.6.1 默认度量单位546

20.6.2 指定另一种度量单位547

20.6.3 指定另一个原点548

20.7 定义颜色值549

20.8 操作字体550

20.8.1 使用字体族551

20.8.2 使用字体名和字体大小552

20.8.3 枚举安装的字体553

20.8.4 FontDialog类555

20.9 System.Drawing.Drawing2D命名空间概述556

20.10 使用Pen556

20.11 使用Brush558

20.11.1 使用HatchBrush559

20.11.2 使用TextureBrush560

20.11.3 使用LinearGradient-Brushe561

20.12 呈现图像562

20.13 PictureBox控件的拖动和单击测试563

20.13.1 呈现图像的单击测试565

20.13.2 非矩形图像的单击测试567

20.14 .NET资源格式569

20.14.1 System.Resources命名空间570

20.14.2 以编程方式创建*.resx文件570

20.14.3 构建*.resources文件571

20.14.4 把*.resources文件绑定到.NET程序集571

20.14.5 使用ResourceWriter572

20.14.6 使用Visual Studio 2005生成资源572

20.14.7 通过编程读取资源574

20.15 小结574

第21章 Windows窗体控件编程575

21.1 Windows窗体控件575

21.2 手动给窗体添加控件575

21.3 使用Visual Studio 2005给窗体添加控件578

21.4 基本控件的使用578

21.4.1 Label的作用579

21.4.2 TextBox的作用580

21.4.3 MaskedTextBox的作用581

21.4.4 Button的作用583

21.4.5 CheckBox、RadioButton和GroupBox的作用585

21.4.6 CheckedListBox的作用587

21.4.7 ListBox的作用588

21.4.8 ComboBox的作用589

21.5 配置选项卡的次序589

21.6 设置窗体的默认输入按钮590

21.7 更多奇特的控件590

21.7.1 MonthCalendar控件的作用591

21.7.2 ToolTip控件的作用592

21.7.3 TabControl控件的作用593

21.7.4 TrackBar的作用593

21.7.5 Panel的作用595

21.7.6 UpDown控件的作用596

21.7.7 ErrorProvider的作用598

21.7.8 TreeView的作用599

21.7.9 WebBrowser的作用603

21.8 创建自定义Windows窗体控件604

21.8.1 创建图像605

21.8.2 构建设计时UI605

21.8.3 实现核心的CarControl605

21.8.4 定义自定义事件607

21.8.5 定义自定义属性607

21.8.6 控制动画608

21.8.7 显示昵称608

21.9 测试CarControl类型609

21.10 创建自定义CarControl窗体宿主609

21.11 System.ComponentModel命名空间的作用610

21.11.1 增强CarControl的设计时外观611

21.11.2 定义默认的属性和默认的事件611

21.11.3 指定自定义的工具箱位图612

21.12 创建自定义对话框613

21.12.1 DialogResult属性614

21.12.2 窗体继承615

21.13 动态定位Windows窗体控件617

21.13.1 Anchor属性617

21.13.2 Dock属性617

21.13.3 表和流布局618

21.14 小结619

第22章 使用ADO.NET访问数据库620

22.1 ADO.NET高层次定义620

22.2 ADO.NET的数据提供器621

22.2.1 微软提供的数据提供器622

22.2.2 选择第三方的数据提供器623

22.3 其他的ADO.NET命名空间623

22.4 System.Data类型624

22.4.1 IDbConnection接口的作用624

22.4.2 IDbTransaction接口的作用625

22.4.3 IDbCommand接口的作用625

22.4.4 IDbDataParameter/IData-Parameter接口的作用625

22.4.5 IDbDataAdapter/IData-Adapter接口的作用626

22.4.6 IDataReader/IdataRecord接口的作用626

22.5 使用接口抽象数据提供器627

22.6 使用应用程序配置文件增加灵活性628

22.7 .NET 2.0提供器工厂模型629

22.7.1 为数据提供器工厂注册630

22.7.2 完整的数据提供器的例子631

22.8 〈connectionStrings〉元素632

22.9 安装Cars数据库633

22.10 ADO.NET的连接式访问635

22.10.1 使用连接对象635

22.10.2 使用.NET 2.0的ConnectionStringBuilder637

22.10.3 使用命令对象638

22.11 使用数据读取器639

22.12 使用命令对象修改表641

22.12.1 插入新的记录643

22.12.2 删除现有记录643

22.12.3 更新现有记录643

22.13 使用参数化的命令对象644

22.14 使用DbCommand执行存储过程646

22.15 .NET 2.0的异步数据访问647

22.16 ADO.NET断开式访问方式648

22.17 DataSet的作用649

22.18 使用DataColumn651

22.18.1 构建DataColumn652

22.18.2 启用列自增652

22.18.3 把DataColumn加入DataTable652

22.19 使用DataRow653

22.20 使用DataTabl e654

22.21 持久化DataSet(和DataTable)成为XML657

22.22 把DataTable呈现到用户界面658

22.22.1 以编程方式删除行660

22.22.2 应用过滤和排序660

22.22.3 更新行662

22.23 使用DataView类型663

22.24 使用数据适配器664

22.24.1 使用数据适配器填充DataSet665

22.24.2 映射数据库名称为友好名称665

22.25 使用数据适配器对象更新数据库666

22.25.1 设置InsertCommand属性667

22.25.2 设置UpdateCommand属性667

22.25.3 设置DeleteCommand属性668

22.26 使用CommandBuilder类型自动生成SQL命令668

22.27 多表DataSet和DataRelation对象670

22.28 最后看一下(数据)向导673

22.28.1 强类型化的DataSet675

22.28.2 自动生成的数据组件675

22.29 小结676

第五部分 Web应用程序和XML Web服务第23章 ASP.NET 2.0网页和Web控件678

23.1 HTTP的作用678

23.2 Web应用程序和Web服务679

23.2.1 使用IIS虚拟目录工作680

23.2.2 ASP.NET 2.0开发服务器680

23.3 HTML的作用681

23.3.1 HTML文档结构681

23.3.2 HTML表单开发682

23.3.3 构建基于HTML的用户界面682

23.4 客户端脚本的作用684

23.4.1 客户端脚本示例685

23.4.2 验证default.htm表单数据685

23.5 提交表单数据(GET和POST)685

23.6 构建传统的ASP页面686

23.7 传统ASP相关问题688

23.7.1 ASP.NET 1.x的主要优点688

23.7.2 ASP.NET 2.0的主要改进688

23.8 ASP.NET 2.0命名空间688

23.9 ASP.NET网页代码模型689

23.9.1 使用单文件页面模型690

23.9.2 使用代码隐藏页面模型694

23.10 ASP.NET站点目录结构细节697

23.10.1 Bin文件夹的作用697

23.10.2 App_Code文件夹的作用698

23.11 ASP.NET 2.0页面编译周期699

23.11.1 单文件页面的编译周期699

23.11.2 多文件页面的编译周期700

23.12 页面类型的继承链701

23.13 与传入的HTTP请求交互702

23.13.1 获得浏览器统计数据703

23.13.2 访问传入的表单数据703

23.13.3 IsPostBack属性704

23.14 与输出HTTP响应交互704

23.14.1 提交HTML内容705

23.14.2 重定向用户705

23.15 ASP.NET网页的生命周期706

23.15.1 AutoEventWireUp特性的作用707

23.15.2 Error事件708

23.16 Web控件的本质709

23.16.1 取得服务器端事件处理权710

23.16.2 AutoPostBack属性710

23.17 System.Web.UI.Control类型711

23.17.1 枚举所包含的控件711

23.17.2 动态添加(和删除)控件712

23.18 System.Web.UI.WebControls.WebControl类型的关键成员713

23.19 ASP.NET Web控件的类别714

23.20 构建简单的ASP.NET 2.0站点714

23.20.1 使用母版页工作715

23.20.2 定义Defrult.aspx内容页面717

23.20.3 设计Inventory内容页面718

23.20.4 设计Build a Car内容页面722

23.21 验证控件的作用724

23.21.1 RequiredFieldValidator725

23.21.2 RegularExpression-Validator725

23.21.3 RangeValidator726

23.21.4 CompareValidator726

23.21.5 创建ValidationSummary727

23.22 小结727

第24章 ASP.NET 2.0 Web应用程序728

24.1 状态问题728

24.2 ASP.NET状态管理技术730

24.3 ASP.NET视图状态的作用730

24.3.1 演示视图状态730

24.3.2 添加自定义视图状态数据732

24.3.3 控件状态简述732

24.4 Global.asax文件的作用733

24.4.1 全局最后异常事件处理程序734

24.4.2 HttpApplication基类735

24.5 应用程序状态与会话状态差别735

24.5.1 维护应用程序级的状态数据736

24.5.2 修改应用程序数据737

24.5.3 处理Web应用程序的关闭738

24.6 使用应用程序缓存738

24.6.1 使用数据缓存739

24.6.2 修改*.aspx文件741

24.7 维护会话数据743

24.8 cookie745

24.8.1 创建cookie746

24.8.2 读取传入的cookie数据747

24.9 使用Web.config配置ASP.NET应用程序747

24.9.1 通过〈trace〉启用跟踪748

24.9.2 通过〈customErrors〉自定义错误输出749

24.9.3 通过〈sessionState〉存储状态750

24.9.4 ASP.NET 2.0站点管理工具751

24.10 配置继承752

24.11 小结753

第25章 XML Web服务754

25.1 XML Web服务的作用754

25.1.1 XML Web服务的优点754

25.1.2 定义XML Web服务客户端755

25.1.3 XML Web服务的基础755

25.1.4 概述XML Web服务发现755

25.1.5 概述XML Web服务描述756

25.1.6 概述传输协议756

25.2 .NET XML Web服务命名空间756

25.3 手动构建XML Web服务757

25.3.1 使用WebDev.WebServer.exe测试XML Web服务758

25.3.2 使用IIS测试XML Web服务759

25.3.3 查看WSDL合约759

25.4 自动生成测试页面759

25.5 使用Visual Studio 2005构建XML Web服务760

25.6 WebService基类的作用762

25.7 [WebService]特性763

25.7.1 Namespace和Description属性的作用763

25.7.2 Name属性763

25.8 [WebServiceBinding]特性764

25.8.1 忽略BP 1.1一致性验证765

25.8.2 禁用BP 1.1一致性验证765

25.9 [WebMethod]特性765

25.9.1 通过Description属性为Web方法归档765

25.9.2 通过MessageName属性避免WSDL名称冲突766

25.9.3 用EnableSession属性构建有状态的Web服务766

25.10 探索WSDL768

25.10.1 定义WSDL文档768

25.10.2 〈types〉元素769

25.10.3 〈message〉元素770

25.10.4 〈portType〉元素770

25.10.5 〈binding〉元素771

25.10.6 〈service〉元素771

25.11 再谈XML Web服务报文协议772

25.11.1 HTTP GET和HTTP POST绑定772

25.11.2 SOAP绑定773

25.12 wsdl.exe命令行的效用774

25.12.1 将WSDL转换成服务器端XML Web服务框架775

25.12.2 将WSDL转换为客户端代理类775

25.13 查看代理服务器代码776

25.13.1 默认的构造函数776

25.13.2 同步调用支持777

25.13.3 异步调用支持777

25.13.4 构建客户端应用程序778

25.14 使用Visual Studio 2005生成代理类778

25.15 从Web方法公开自定义类型779

25.15.1 公开数组779

25.15.2 公开结构780

25.15.3 公开ADO.NET数据集781

25.15.4 Windows窗体客户端781

25.15.5 客户端类型代理783

25.16 发现服务协议(UDDI)784

25.17 小结785

第六部分 .NET 3.0扩展编程788

第26章 建立.NET 3.0编程环境788

26.1 .NET 3.0技术介绍788

26.2 C# 3.0和LINQ技术介绍789

26.3 欢迎使用.NET 3.0789

26.4 安装.NET Framework 3.0运行库组件790

26.5 安装Windows软件开发包791

26.5.1 选择安装项791

26.5.2 研究SDK的内容792

26.6 安装Visual Studio“Orcas”开发工具793

26.6.1 安装WPF和WCF项目支持793

26.6.2 安装Visual Studio 2005为WF提供的扩展794

26.7 安装C# 3.0和LINQ社区预览版795

26.8 小结796

第27章 WPF介绍797

27.1 WPF背后的动机797

27.1.1 通过XAML将关注点分离798

27.1.2 提供优化的呈现模型799

27.2 WPF程序集详解799

27.2.1 Application类的作用800

27.2.2 Window类的作用801

27.3 创建(不使用XAML的)WPF应用程序803

27.3.1 扩展Window类805

27.3.2 创建简单的用户界面805

27.4 XAML介绍806

27.4.1 用XAML定义MainWindow807

27.4.2 用XAML定义应用对象808

27.4.3 通过msbuild.exe处理XAML文件809

27.5 将标记转换为.NET程序集810

27.5.1 XAML到C#代码的映射810

27.5.2 BAML的作用811

27.5.3 XAML到程序集的过程摘要813

27.6 使用代码隐藏文件实现的关注点的分离813

27.7 在XamlPad中练习使用XAML815

27.8 使用Visual Studio“Orcas”创建WPF应用程序816

27.9 使用微软表达式交互设计器生成XAML817

27.10 使用面板控制内容布局818

27.10.1 在Canvas面板中放置内容819

27.10.2 在WrapPanel面板中放置内容820

27.10.3 在StackPanel面板内放置内容821

27.10.4 在Grid面板中放置内容822

27.10.5 在DockPanel面板中放置内容823

27.10.6 使用嵌套的面板创建窗体的框架823

27.11 WPF控件825

27.11.1 配置WPF控件825

27.11.2 使用WPF控件属性826

27.11.3 处理WPF控件事件828

27.11.4 应用控件样式829

27.12 WPF图形显示服务简介831

27.12.1 WPF图形服务详解832

27.12.2 使用基本的形状833

27.12.3 WPF动画服务介绍834

27.12.4 使用微软Expression图形设计器生成XAML836

27.13 XAML浏览器应用程序简介836

27.14 小结838

第28章 WCF介绍839

28.1 WCF背后的动机839

28.2 探究WCF核心程序集840

28.3 WCF基础841

28.3.1 WCF契约841

28.3.2 WCF绑定841

28.3.3 WCF地址843

28.4 构建完整的WCF应用程序843

28.4.1 组成WCF应用程序的相关程序集843

28.4.2 契约的定义与实现843

28.5 承载WCF服务846

28.5.1 指明ABC848

28.5.2 ServiceHost类型的功能848

28.6 〈system.ServiceModel〉元素的细节849

28.7 与WCF服务进行通信852

28.7.1 使用svcutil.exe生成代理代码852

28.7.2 使用Visual Studio 2005生成代理代码853

28.8 WCF的数据类型表示854

28.8.1 更新ICarOrder服务契约854

28.8.2 对CarOrderServiceClient程序集重新编码856

28.8.3 使用XmlSerializer进行数据编码857

28.8.4 使用二进制格式传输数据857

28.9 使用服务配置编辑器生成WCF配置文件858

28.10 小结859

第29章 WF介绍860

29.1 WF背后的动机860

29.2 WF的积木块861

29.2.1 WF中的集成服务862

29.2.2 WF活动初览862

29.2.3 顺序工作流和状态机工作流的作用863

29.2.4 深入探讨工作流865

29.3 WF程序集和核心命名空间865

29.4 建造一个启用工作流的简单应用866

29.4.1 研究初始工作流的代码866

29.4.2 添加Code活动867

29.4.3 添加While活动868

29.4.4 研究WF引擎承载代码870

29.4.5 添加定制的起初参数871

29.5 在工作流中调用Web服务873

29.6 构建可重用的WF代码库877

29.6.1 编写简单的工作流878

29.6.2 创建启用工作流的Windows Forms应用程序878

29.7 关于自定义活动的简要说明879

29.8 小结880

第30章 C# 3.0的语言功能881

30.1 使用C# 3.0命令行编译器881

30.2 理解隐式类型化的局部变量882

30.2.1 隐式类型化变量的限制883

30.2.2 隐式类型化的局部数组884

30.2.3 隐式数据类型化的最后注意事项884

30.3 理解扩展方法885

30.3.1 定义扩展方法885

30.3.2 在实例层次上调用扩展方法886

30.3.3 静态调用扩展方法887

30.3.4 导入定义了扩展方法的类型888

30.3.5 构建和使用扩展库888

30.4 理解对象初始化器890

30.4.1 使用初始化语法调用自定义构造函数891

30.4.2 初始化内部类型892

30.4.3 理解集合的初始化893

30.5 理解匿名类型894

30.5.1 匿名类型的内部表示方式895

30.5.2 方法ToString()和方法GetHashCode()的实现896

30.5.3 匿名类型的相等语义897

30.5.4 包含匿名类型的匿名类型898

30.6 理解Lambda表达式的角色899

30.6.1 Lambda表达式是更好的匿名方法900

30.6.2 剖析Lambda表达式902

30.6.3 Lambda表达式的两种风格902

30.6.4 使用Lambda表达式重新编写CarDelegate示例903

30.6.5 含有多个(或零个)参数的Lambda表达式905

30.7 小结906

第31章 LINQ介绍907

31.1 定义LINQ的作用907

31.2 核心LINQ程序集908

31.3 LINQ查询表达式初览909

31.3.1 重访隐型局部变量911

31.3.2 重访扩展方法912

31.4 用LINQ查询泛型集合913

31.4.1 定义LINQ查询914

31.4.2 重访匿名类型914

31.5 使用LINQ查询非泛型集合915

31.6 查询运算符的内部表示916

31.6.1 用查询运算符建立查询表达式(复习)917

31.6.2 使用Sequence类型和Lambda表达式来建立查询表达式917

31.6.3 使用Sequence类型和匿名方法来建立查询表达式918

31.6.4 用Sequence类型和原始代理建立查询表达式919

31.7 研究LINQ查询运算符920

31.8 构建LINQ查询表达式920

31.8.1 基本的选择语法921

31.8.2 获取数据子集922

31.8.3 逆转结果集的顺序923

31.8.4 对表达式进行排序923

31.8.5 转换查询结果以及转换延缓执行的作用924

31.9 使用LINQ到SQL来查询关系数据库925

31.9.1 实体类的作用926

31.9.2 DataContext类型的作用926

31.9.3 一个LINQ到SQL的简单例子926

31.9.4 建立强类型的DataContext927

31.9.5 详细介绍[Table]特性和[Column]特性928

31.10 使用sqlmetal.exe生成实体类929

31.10.1 研究生成的实体类930

31.10.2 使用实体类来定义关系931

31.10.3 强类型的DataContext932

31.10.4 针对生成的类型来编程933

31.11 使用Visual Studio 2005建立实体类934

31.11.1 插入新项935

31.11.2 更新现有项936

31.11.3 删除现有项936

31.12 使用LINQ到XML操作XML文档936

31.12.1 System.Xml.XLinq命名空间937

31.12.2 以编程方式创建XML文档937

31.12.3 装载并分析XML内容939

31.13 在内存文档中导航940

31.13.1 使用LINQ到XML来选择元素940

31.13.2 在XML文档中修改数据941

31.14 小结942

热门推荐