精通C#(第6版)

精通C#(第6版)
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [美] , , ,
2013-07
版次: 6
ISBN: 9787115321817
定价: 159.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 1192页
字数: 1813千字
正文语种: 简体中文
原版书名: Pro C# 5.0 and the .NET 4.5 framework,sixth edition
202人买过
  •   《图灵程序设计丛书:精通C#(第6版)》是C#领域久负盛名的经典著作,深入全面地讲解了C#编程语言和。NET平台的核心内容,并结合大量示例剖析相关概念。全书分为八部分:C#和。NET平台、C#核心编程结构、C#面向对象编程、高级C#编程结构、用。NET程序集编程、。NET基础类库、WPF和ASP。NETWebForms。第6版是对第5版的进一步更新和完善,内容涵盖了先进的。NET编程技术和技巧,并准确呈现出C#编程语言的新变化和。NET4。5Framework的新特性。
      《图灵程序设计丛书:精通C#(第6版)》由微软C#MVPAndrewTroelsen编写,第6版专门针对C#5。0和。NET4。5进行了细致入微的修订,是各层次。NET开发人员的必读之作。
      AndrewTroelsen,世界C#专家,微软VisualC#MVP。他是著名的微软技术咨询企业Intertech的合伙人和副总裁,该公司的客户包括微软、霍尼韦尔、美国国家航空航天局等。他曾是MSDN网站和MacTech网站.NET技术帖专家,并经常在业界主要技术会议上发表演讲和开设技术讲座。他还是公认的C#和.NET畅销技术书作家。除本书外,他还著有ProExpressionBlend4、ProVB2008andthe.NET3.5Platform和COMand.NETInteroperability等近二十部.NET技术方面的著作。 第一部分C#与.NET平台
    第1章.NET之道
    1.1初识.NET平台
    1.2.NET平台构造块(CLR、CTS和CLS)简介
    1.2.1基础类库的作用
    1.2.2C#的优点
    1.2.3托管代码与非托管代码
    1.3其他支持.NET的编程语言
    1.4.NET程序集概览
    1.4.1CIL的作用
    1.4.2.NET类型元数据的作用
    1.4.3程序集清单的作用
    1.5CTS
    1.5.1CTS类类型
    1.5.2CTS接口类型
    1.5.3CTS结构类型
    1.5.4CTS枚举类型
    1.5.5CTS委托类型
    1.5.6CTS类型成员
    1.5.7内建的CTS数据类型
    1.6CLS
    1.7CLR
    1.8程序集/命名空间/类型的区别
    1.8.1Microsoft根命名空间的作用
    1.8.2以编程方式访问命名空间
    1.8.3引用外部程序集
    1.9使用ildasm.exe探索程序集
    1.9.1查看CIL代码
    1.9.2查看类型元数据
    1.9.3查看程序集元数据(即清单)
    1.10.NET的平台无关性
    1.11Windows8应用程序简介
    1.11.1构建Windows8应用程序
    1.11.2.NET在Windows8中的作用
    1.12小结

    第2章构建C#应用程序
    2.1.NETFramework4.5SDK的作用
    2.2用csc.exe构建C#应用程序
    2.2.1指定输入输出目标
    2.2.2引用外部程序集
    2.2.3引用多个外部程序集
    2.2.4编译多个源文件
    2.2.5使用C#响应文件
    2.3使用Notepad++构建.NET应用程序
    2.4使用SharpDevelop构建.NET应用程序
    2.5使用VisualC#Express构建.NET应用程序
    2.6使用VisualStudio构建.NET应用程序
    2.6.1VisualStudio的独特功能
    2.6.2使用NewProject对话框指向.NETFramework
    2.6.3解决方案资源管理器
    2.6.4ClassView工具
    2.6.5ObjectBrowser工具
    2.6.6集成对代码重构的支持
    2.6.7代码扩展和围绕技术
    2.6.8可视化ClassDesigner
    2.6.9集成的.NETFramework4.5SDK文档系统
    2.7小结

    第二部分C#核心编程结构
    第3章C#核心编程结构Ⅰ
    3.1一个简单的C#程序
    3.1.1Main方法的其他形式
    3.1.2指定应用程序错误代码
    3.1.3处理命令行参数
    3.1.4使用VisualStudio指定命令行参数
    3.2有趣的题外话:System.Environment类的其他成员
    3.3System.Console类
    3.3.1使用Console类进行基本的输入和输出
    3.3.2格式化控制台输出
    3.3.3格式化数值数据
    3.3.4在控制台应用程序外格式化数值数据
    3.4系统数据类型和相应的C#关键字
    3.4.1变量声明和初始化
    3.4.2内建数据类型与new操作符
    3.4.3数据类型类的层次结构
    3.4.4数值数据类型的成员
    3.4.5System.Boolean的成员
    3.4.6System.Char的成员
    3.4.7从字符串数据中解析数值
    3.4.8System.DateTime和System.TimeSpan
    3.4.9System.Numerics.dll程序集
    3.5使用字符串数据
    3.5.1基本的字符串操作
    3.5.2字符串拼接
    3.5.3转义字符
    3.5.4定义逐字字符串
    3.5.5字符串和相等性
    3.5.6字符串是不可变的
    3.5.7System.Text.StringBuilder类型
    3.6窄化和宽化数据类型转换
    3.6.1checked关键字
    3.6.2设定项目级别的溢出检测
    3.6.3unchecked关键字
    3.7隐式类型本地变量
    3.7.1隐式类型变量的限制
    3.7.2隐式类型数据是强类型数据
    3.7.3隐式类型本地变量的用途
    3.8C#迭代结构
    3.8.1for循环
    3.8.2foreach循环
    3.8.3while和do/while循环结构
    3.9条件结构和关系/相等操作符
    3.9.1if/else语句
    3.9.2关系/相等操作符
    3.9.3逻辑操作符
    3.9.4switch语句
    3.10小结

    第4章C#核心编程结构Ⅱ
    4.1方法和参数修饰符
    4.1.1默认的参数传递行为
    4.1.2out修饰符
    4.1.3ref修饰符
    4.1.4params修饰符
    4.1.5定义可选参数
    4.1.6使用命名参数调用方法
    4.1.7成员重载
    4.2C#数组
    4.2.1C#数组初始化语法
    4.2.2隐式类型本地数组
    4.2.3定义object数组
    4.2.4使用多维数组
    4.2.5数组作为参数(和返回值)
    4.2.6System.Array基类
    4.3枚举类型
    4.3.1控制枚举的底层存储
    4.3.2声明枚举变量
    4.3.3System.Enum类型
    4.3.4动态获取枚举的名称/值对
    4.4结构类型
    4.5值类型和引用类型
    4.5.1值类型、引用类型和赋值操作符
    4.5.2包含引用类型的值类型
    4.5.3按值传递引用类型
    4.5.4按引用传递引用类型
    4.5.5值类型和引用类型:最后的细节
    4.6C#可空类型
    4.6.1使用可空类型
    4.6.2??操作符
    4.7小结

    第三部分C#面向对象编程
    第5章封装
    5.1C#类类型
    5.2构造函数
    5.2.1默认构造函数的作用
    5.2.2定义自定义的构造函数
    5.2.3再谈默认构造函数
    5.3this关键字的作用
    5.3.1使用this进行串联构造函数调用
    5.3.2观察构造函数流程
    5.3.3再谈可选参数
    5.4static关键字
    5.4.1定义静态数据
    5.4.2定义静态方法
    5.4.3定义静态构造函数
    5.4.4定义静态类
    5.5定义OOP的支柱
    5.5.1封装的作用
    5.5.2继承的作用
    5.5.3多态的作用
    5.6C#访问修饰符
    5.6.1默认的访问修饰符
    5.6.2访问修饰符和嵌套类型
    5.7第一个支柱:C#的封装服务
    5.7.1使用传统的访问方法和修改方法执行封装
    5.7.2使用.NET属性进行封装
    5.7.3使用类的属性
    5.7.4只读和只写属性
    5.7.5静态属性
    5.8自动属性
    5.8.1与自动属性交互
    5.8.2关于自动属性和默认值
    5.9对象初始化语法
    5.9.1使用初始化语法调用自定义构造函数
    5.9.2初始化内部类型
    5.10常量数据
    5.10.1只读字段
    5.10.2静态只读字段
    5.11分部类型
    5.12小结

    第6章继承和多态
    6.1继承的基本机制
    6.1.1指定既有类的父类
    6.1.2多个基类
    6.1.3sealed关键字
    6.2回顾VisualStudio类关系图
    6.3OOP的第二个支柱:继承
    6.3.1使用base关键字控制基类的创建
    6.3.2家族的秘密:protected关键字
    6.3.3增加密封类
    6.4包含/委托编程
    6.5OOP的第三个支柱:C#的多态支持
    6.5.1virtual和override关键字
    6.5.2使用VisualStudioIDE重写虚方法
    6.5.3密封虚成员
    6.5.4抽象类
    6.5.5构建多态接口
    6.5.6成员投影
    6.6基类/派生类的转换规则
    6.6.1C#的as关键字
    6.6.2C#的is关键字
    6.7超级父类:System.Object
    6.7.1重写System.Object.ToString
    6.7.2重写System.Object.Equals
    6.7.3重写System.Object.GetHashCode
    6.7.4测试修改后的Person类
    6.7.5System.Object的静态成员
    6.8小结

    第7章结构化异常处理
    7.1错误、bug与异常
    7.2.NET异常处理的作用
    7.2.1.NET异常处理的四要素
    7.2.2System.Exception基类
    7.3最简单的例子
    7.3.1引发普通的异常
    7.3.2捕获异常
    7.4配置异常的状态
    7.4.1TargetSite属性
    7.4.2StackTrace属性
    7.4.3HelpLink属性
    7.4.4Data属性
    7.5系统级异常
    7.6应用程序级异常
    7.6.1构建自定义异常,第一部分
    7.6.2构建自定义异常,第二部分
    7.6.3构建自定义异常,第三部分
    7.7处理多个异常
    7.7.1通用的catch语句
    7.7.2再次引发异常
    7.7.3内部异常
    7.7.4finally块
    7.8谁在引发什么异常
    7.9未处理异常的后果
    7.10使用VisualStudio调试未处理的异常
    7.11小结

    第8章接口
    8.1接口类型
    8.2定义自定义接口
    8.3实现接口
    8.4在对象级别调用接口成员
    8.4.1获取接口引用:as关键字
    8.4.2获取接口引用:is关键字
    8.5接口作为参数
    8.6接口作为返回值
    8.7接口类型数组
    8.8使用VisualStudio实现接口
    8.9显式接口实现
    8.10设计接口层次结构
    8.11构建可枚举类型(IEnumerable和IEnumerator)
    8.11.1用yield关键字构建迭代器方法
    8.11.2构建命名迭代器
    8.12构建可克隆的对象(ICloneable)
    8.13构建可比较的对象(IComparable)
    8.13.1指定多个排序顺序
    8.13.2自定义属性、自定义排序类型
    8.14小结

    第四部分高级C#编程结构
    第9章集合与泛型
    9.1集合类的动机
    9.1.1System.Collections命名空间
    9.1.2System.Collections.Specialized命名空间
    9.2非泛型集合的问题
    9.2.1性能问题
    9.2.2类型安全问题
    9.2.3初识泛型集合
    9.3泛型类型参数的作用
    9.3.1为泛型类/结构指定类型参数
    9.3.2为泛型成员指定类型参数
    9.3.3为泛型接口指定类型参数
    9.4System.Collections.Generic命名空间
    9.4.1集合初始化语法
    9.4.2使用List类
    9.4.3使用Stack类
    9.4.4使用Queue类
    9.4.5使用SortedSet类
    9.5System.Collections.ObjectModel命名空间
    9.6创建自定义泛型方法
    9.7创建自定义泛型结构和类
    9.8类型参数的约束
    9.8.1使用where关键字的示例
    9.8.2操作符约束的不足
    9.9小结

    第10章委托、事件和Lambda表达式
    10.1.NET委托类型
    10.1.1在C#中定义委托类型
    10.1.2System.MulticastDelegate与System.Delegate基类
    10.2最简单的委托示例
    10.3使用委托发送对象状态通知
    10.3.1支持多路广播
    10.3.2从委托的调用列表中移除成员
    10.3.3方法组转换语法
    10.4泛型委托
    10.5C#事件
    10.5.1event关键字
    10.5.2揭开事件的神秘面纱
    10.5.3监听传入的事件
    10.5.4使用VisualStudio简化事件注册
    10.5.5创建自定义的事件参数
    10.5.6泛型EventHandler委托
    10.6C#匿名方法
    10.7Lambda表达式
    10.7.1剖析Lambda表达式
    10.7.2使用多个语句处理参数
    10.7.3含有多个(或零个)参数的Lambda表达式
    10.7.4使用Lambda表达式重新编写CarEvents示例
    10.8小结

    第11章高级C#语言特性
    11.1索引器方法
    11.1.1使用字符串值索引对象
    11.1.2重载索引器方法
    11.1.3多维的索引器
    11.1.4在接口类型上定义索引器
    11.2操作符重载
    11.2.1重载二元操作符
    11.2.2+=与-=操作符
    11.2.3重载一元操作符
    11.2.4重载相等操作符
    11.2.5重载比较操作符
    11.2.6操作符重载的最后思考
    11.3自定义类型转换
    11.3.1回顾:数值转换
    11.3.2回顾:相关的类类型间的转换
    11.3.3创建自定义转换例程
    11.3.4Square类型的其他显式转换
    11.3.5定义隐式转换例程
    11.4扩展方法
    11.4.1定义扩展方法
    11.4.2在实例层次上调用扩展方法
    11.4.3导入扩展方法
    11.4.4扩展方法的智能感知
    11.4.5扩展实现了指定接口的类型
    11.5匿名类型
    11.5.1定义匿名类型
    11.5.2匿名类型的内部表示方式
    11.5.3方法ToString和GetHashCode的实现
    11.5.4匿名类型的相等语义
    11.5.5包含匿名类型的匿名类型
    11.6指针类型
    11.6.1unsafe关键字
    11.6.2*和&操作符
    11.6.3不安全(与安全)交换功能
    11.6.4通过指针访问字段
    11.6.5stackalloc关键字
    11.6.6使用fixed关键字固定类型
    11.6.7sizeof关键字
    11.7小结

    第12章LINQtoObject
    12.1LINQ特有的编程结构
    12.1.1隐式类型本地变量
    12.1.2对象和集合初始化语法
    12.1.3Lambda表达式
    12.1.4扩展方法
    12.1.5匿名类型
    12.2LINQ的作用
    12.2.1LINQ表达式是强类型的
    12.2.2核心LINQ程序集
    12.3将LINQ查询应用于原始数组
    12.3.1再一次,不使用LINQ
    12.3.2反射LINQ结果集
    12.3.3LINQ和隐式类型本地变量
    12.3.4LINQ和扩展方法
    12.3.5延迟执行的作用
    12.3.6立即执行的作用
    12.4返回LINQ查询的结果
    12.5将LINQ查询应用到集合对象
    12.5.1访问包含的子对象
    12.5.2将LINQ查询应用于非泛型集合
    12.5.3使用OfType筛选数据
    12.6C#LINQ查询操作符
    12.6.1基本的选择语法
    12.6.2获取数据子集
    12.6.3投影新数据类型
    12.6.4使用Enumerable获取总数
    12.6.5反转结果集
    12.6.6对表达式进行排序
    12.6.7维恩图工具
    12.6.8移除重复
    12.6.9LINQ聚合操作
    12.7LINQ查询语句的内部表示
    12.7.1用查询操作符建立查询表达式(复习)
    12.7.2使用Enumerable类型和Lambda表达式来建立查询表达式
    12.7.3使用Enumerable类型和匿名方法来建立查询表达式
    12.7.4用Enumerable类型和原始委托建立查询表达式
    12.8小结

    第13章对象的生命周期
    13.1类、对象和引用
    13.2对象生命周期的基础
    13.2.1CIL的new指令
    13.2.2将对象引用设置为空
    13.3应用程序根的作用
    13.4对象的代
    13.5.NET1.0至.NET3.5的并发垃圾回收
    13.6.NET4.0及后续版本
    13.7System.GC类型
    13.8构建可终结对象
    13.8.1重写System.Object.Finalize
    13.8.2终结过程的细节
    13.9构建可处置对象
    13.10构建可终结类型和可处置类型
    13.11延迟对象实例化
    13.12小结

    第五部分用.NET程序集编程
    第14章.NET程序集入门
    14.1定义自定义命名空间
    14.1.1使用完全限定名解决命名冲突
    14.1.2使用别名解决命名冲突
    14.1.3创建嵌套的命名空间
    14.1.4VisualStudio的默认命名空间
    14.2.NET程序集的作用
    14.2.1程序集促进代码重用
    14.2.2程序集确定类型边界
    14.2.3程序集是可版本化的单元
    14.2.4程序集是自描述的
    14.2.5程序集是可配置的
    14.3.NET程序集的格式
    14.3.1Windows文件首部
    14.3.2CLR文件首部
    14.3.3CIL代码、类型元数据和程序集清单
    14.3.4可选的程序集资源
    14.4构建和使用自定义类库
    14.4.1清单
    14.4.2CIL
    14.4.3类型元数据
    14.4.4构建C#客户端应用程序
    14.4.5构建VisualBasic客户端应用程序
    14.4.6实现跨语言继承
    14.5私有程序集
    14.5.1私有程序集的标识
    14.5.2探测过程
    14.5.3配置私有程序集
    14.5.4App.Config文件
    14.6共享程序集
    14.6.1全局程序集缓存
    14.6.2强名称
    14.6.3在命令行生成强名称
    14.6.4使用VisualStudio为程序集赋予强名称
    14.6.5在GAC中安装强名称的程序集
    14.7使用共享程序集
    14.8配置共享程序集
    14.8.1冻结当前的共享程序集
    14.8.2构建共享程序集2.0.0.0版本
    14.8.3动态重定向到共享程序集的特定版本
    14.9发行者策略程序集
    14.10元素
    14.11System.Configuration命名空间
    14.12配置文件架构文档
    14.13小结

    第15章类型反射、晚期绑定和基于特性的编程
    15.1类型元数据的必要性
    15.1.1查看(部分)EngineState枚举的元数据
    15.1.2查看(部分)Car类型的元数据
    15.1.3研究TypeRef
    15.1.4记录定义的程序集
    15.1.5记录引用的程序集
    15.1.6记录字符串字面量
    15.2反射
    15.2.1System.Type类
    15.2.2使用System.Object.GetType得到Type引用
    15.2.3使用typeof得到Type引用
    15.2.4使用System.Type.GetType得到Type引用
    15.3构建自定义的元数据查看器
    15.3.1反射方法
    15.3.2反射字段和属性
    15.3.3反射实现的接口
    15.3.4显示其他信息
    15.3.5实现Main
    15.3.6反射泛型类型
    15.3.7反射方法参数和返回值
    15.4动态加载程序集
    15.5反射共享程序集
    15.6晚期绑定
    15.6.1System.Activator类
    15.6.2调用没有参数的方法
    15.6.3调用有参数的方法
    15.7.NET特性的作用
    15.7.1特性的使用者
    15.7.2在C#中使用特性
    15.7.3C#特性简化符号
    15.7.4为特性指定构造参数
    15.7.5Obsolete特性
    15.8构建自定义特性
    15.8.1应用自定义特性
    15.8.2命名属性语法
    15.8.3限制特性使用
    15.9程序集级别特性
    15.10使用早期绑定反射特性
    15.11使用晚期绑定反射特性
    15.12反射、晚期绑定和自定义特性的使用背景
    15.13构建可扩展的应用程序
    15.13.1构建CommonSnappable-Types.dll
    15.13.2构建C#插件
    15.13.3构建VisualBasic插件
    15.13.4构建可扩展的WindowsForms应用程序
    15.14小结

    第16章动态类型和动态语言运行时
    16.1dynamic关键字的作用
    16.1.1调用动态声明的数据的成员
    16.1.2Microsoft.CSharp.dll程序集的作用
    16.1.3dynamic关键字的作用域
    16.1.4dynamic关键字的限制
    16.1.5dynamic关键字的实际用途
    16.2DLR的作用
    16.2.1表达式树的作用
    16.2.2System.Dynamic命名空间的作用
    16.2.3表达式树的动态运行时查找
    16.3使用动态类型简化后期绑定调用
    16.4使用动态数据简化COM互操作
    16.4.1主互操作程序集的作用
    16.4.2嵌入互操作元数据
    16.4.3普通COM互操作的难点
    16.5使用C#动态数据进行COM互操作
    16.6不使用C#动态数据进行COM互操作
    16.7小结

    第17章进程、应用程序域和对象上下文
    17.1Windows进程的作用
    17.2.NET平台下与进程进行交互
    17.2.1列举运行中的进程
    17.2.2特定的进程
    17.2.3进程的线程集合
    17.2.4进程中的模块集合
    17.2.5以编程方式启动或结束进程
    17.2.6使用ProcessStartInfo类控制进程的启动
    17.3.NET应用程序域
    17.4与默认应用程序域进行交互
    17.4.1枚举加载的程序集
    17.4.2接收程序集加载通知
    17.5创建新的应用程序域
    17.5.1在自定义应用程序域中加载程序集
    17.5.2以编程方式卸载应用程序域
    17.6对象上下文边界
    17.6.1上下文灵活和上下文绑定类型
    17.6.2定义上下文绑定对象
    17.6.3研究对象的上下文
    17.7进程、应用程序域和上下文小结
    17.8小结

    第18章CIL和动态程序集的作用
    18.1学习CIL语法的原因
    18.2CIL指令、特性和操作码
    18.2.1CIL指令的作用
    18.2.2CIL特性的作用
    18.2.3CIL操作码的作用
    18.2.4区别CIL操作码和CIL助记符
    18.3入栈和出栈:CIL基于栈的本质
    18.4正反向工程
    18.4.1CIL代码标签的作用
    18.4.2与CIL交互:修改*.il文件
    18.4.3使用ilasm.exe编译CIL代码
    18.4.4peverify.exe的作用
    18.5CIL指令和特性
    18.5.1在CIL中指定外部引用程序集
    18.5.2在CIL中定义当前程序集
    18.5.3在CIL中定义命名空间
    18.5.4在CIL中定义类类型
    18.5.5在CIL中定义和实现接口
    18.5.6在CIL中定义结构
    18.5.7在CIL中定义枚举
    18.5.8在CIL中定义泛型
    18.5.9编译CILTypes.il文件
    18.6.NET基础类库、C#和CIL数据类型的映射
    18.7在CIL中定义类型成员
    18.7.1在CIL中定义数据字段
    18.7.2在CIL中定义类型的构造函数
    18.7.3在CIL中定义属性
    18.7.4定义成员参数
    18.8剖析CIL操作码
    18.8.1.maxstack指令
    18.8.2在CIL中声明本地变量
    18.8.3在CIL中映射参数到本地变量
    18.8.4this隐式引用
    18.8.5在CIL中使用循环结构
    18.9使用CIL构建.NET程序集
    18.9.1构建CILCars.dll
    18.9.2构建CILCarClient.exe
    18.10动态程序集
    18.10.1System.Reflection.Emit命名空间
    18.10.2System.Reflection.Emit.ILGenerator的作用
    18.10.3产生动态的程序集
    18.10.4产生程序集和模块集
    18.10.5ModuleBuilder类型的作用
    18.10.6产生HelloClass类型和字符串成员变量
    18.10.7产生构造函数
    18.10.8产生SayHello方法
    18.10.9使用动态产生的程序集
    18.11小结

    第六部分.NET基础类库
    第19章多线程、并行和异步编程
    19.1进程、应用程序域、上下文及线程之间的关系
    19.1.1并发问题
    19.1.2线程同步的作用
    19.2.NET委托的简短回顾
    19.3委托的异步性
    19.3.1BeginInvoke和EndInvoke方法
    19.3.2System.IAsyncResult接口
    19.4异步调用方法
    19.4.1同步调用线程
    19.4.2AsyncCallback委托的作用
    19.4.3AsyncResult类的作用
    19.4.4传递和接收自定义状态数据
    19.5System.Threading命名空间
    19.6System.Threading.Thread类
    19.6.1获得当前执行线程的统计信息
    19.6.2Name属性
    19.6.3Priority属性
    19.7手工创建次线程
    19.7.1使用ThreadStart委托
    19.7.2使用ParameterizedThreadStart委托
    19.7.3AutoResetEvent类
    19.7.4前台线程和后台线程
    19.8并发问题
    19.8.1使用C#的lock关键字进行同步
    19.8.2使用System.Threading.Monitor类型进行同步
    19.8.3使用System.Threading.Interlocked类型进行同步
    19.8.4使用[Synchronization]特性进行同步
    19.9使用TimerCallback编程
    19.10CLR线程池
    19.11使用任务并行库进行并行编程
    19.11.1任务并行库API
    19.11.2Parallel类的作用
    19.11.3使用Parallel类的数据并行
    19.11.4在次线程中访问UI元素
    19.11.5Task类
    19.11.6处理取消请求
    19.11.7使用并行类的任务并行
    19.12并行LINQ查询(PLINQ)
    19.12.1使用PLINQ查询
    19.12.2取消PLINQ查询
    19.13.NET4.5下的异步调用
    19.13.1C#async和await关键字初探
    19.13.2异步方法的命名约定
    19.13.3返回void的异步方法
    19.13.4具有多个await的异步方法
    19.13.5用async/await改进AddWithThreads示例
    19.14小结

    第20章文件输入输出和对象序列化
    20.1研究System.IO命名空间
    20.2Directory(Info)和File(Info)类型
    20.3使用DirectoryInfo类型
    20.3.1使用DirectoryInfo类型枚举出文件
    20.3.2使用DirectoryInfo类型创建子目录
    20.4使用Directory类型
    20.5使用DriveInfo类类型
    20.6使用FileInfo类
    20.6.1FileInfo.Create方法
    20.6.2FileInfo.Open方法
    20.6.3FileInfo.OpenRead和FileInfo.OpenWrite方法
    20.6.4FileInfo.OpenText方法
    20.6.5FileInfo.CreateText和FileInfo.AppendText方法
    20.7使用File类型
    20.8Stream抽象类
    20.9使用StreamWriter和StreamReader类型
    20.9.1写文本文件
    20.9.2读文本文件
    20.9.3直接创建StreamWriter/StreamReader类型
    20.10使用StringWriter和StringReader类型
    20.11使用BinaryWriter和BinaryReader
    20.12以编程方式“观察”文件
    20.13对象序列化
    20.14为序列化配置对象
    20.14.1定义可序列化的类型
    20.14.2公共字段、私有字段和公共属性
    20.15选择序列化格式化程序
    20.15.1IFormatter和IRemoting-Formatting接口
    20.15.2在格式化程序中的类型保真
    20.16使用BinaryFormatter序列化对象
    20.17使用SoapFormatter序列化对象
    20.18使用XmlSerializer序列化对象
    20.19序列化对象集合
    20.20自定义Soap/Binary序列化过程
    20.20.1深入了解对象序列化
    20.20.2使用ISerializable自定义序列化
    20.20.3使用特性定制序列化
    20.21小结

    第21章ADO.NET之一:连接层
    21.1ADO.NET的宏观定义
    21.2ADO.NET数据提供程序
    21.2.1微软提供的ADO.NET数据提供程序
    21.2.2关于System.Data.Oracle-Client.dll
    21.2.3选择第三方的数据提供程序
    21.3其他的ADO.NET命名空间
    21.4System.Data命名空间的类型
    21.4.1IDbConnection接口的作用
    21.4.2IDbTransaction接口的作用
    21.4.3IDbCommand接口的作用
    21.4.4IDbDataParameter和IDataParameter接口的作用
    21.4.5IDbDataAdapter和IDataAdapter接口的作用
    21.4.6IDataReader和IDataRecord接口的作用
    21.5使用接口的抽象数据提供程序
    21.6创建AutoLot数据库
    21.6.1创建Inventory表
    21.6.2为Inventory表添加测试记录
    21.6.3编写GetPetName存储过程
    21.6.4创建Customers和Orders表
    21.6.5可视化创建表关系
    21.7ADO.NET数据提供程序工厂模型
    21.7.1完整的数据提供程序工厂的例子
    21.7.2数据提供程序工厂模型的潜在缺陷
    21.7.3元素
    21.8ADO.NET的连接层
    21.8.1使用连接对象
    21.8.2使用ConnectionStringBuilder对象
    21.8.3使用命令对象
    21.9使用数据读取器
    21.10构建可重用的数据访问库
    21.10.1增加连接逻辑
    21.10.2增加插入逻辑
    21.10.3增加删除逻辑
    21.10.4增加更新逻辑
    21.10.5增加选择逻辑
    21.10.6使用参数化的命令对象
    21.10.7执行存储过程
    21.11创建控制台UI前端
    21.11.1实现Main方法
    21.11.2实现ShowInstructions方法
    21.11.3实现ListInventory方法
    21.11.4实现DeleteCar方法
    21.11.5实现InsertNewCar方法
    21.11.6实现UpdateCarPetName方法
    21.11.7实现LookUpPetName
    21.12数据库事务
    21.12.1ADO.NET事务对象的主要成员
    21.12.2为AutoLot数据库添加CreditRisks表
    21.12.3为InventoryDAL添加事物方法
    21.12.4测试数据库事务
    21.13小结

    第22章ADO.NET之二:断开连接层
    22.1ADO.NET断开连接层
    22.2DataSet的作用
    22.2.1DataSet的主要属性
    22.2.2DataSet的主要方法
    22.2.3构建DataSet
    22.3使用DataColumn
    22.3.1构建DataColumn
    22.3.2启用自增列
    22.3.3把DataColumn对象加入DataTable
    22.4使用DataRow
    22.4.1RowState属性
    22.4.2DataRowVersion属性
    22.5使用DataTable
    22.5.1将DataTable插入到DataSet中
    22.5.2获取DataSet中的数据
    22.5.3使用DataTableReader对象处理DataTable
    22.5.4序列化DataTable/DataSet对象为XML
    22.5.5以二进制格式序列化Data-Table/DataSet对象
    22.6将DataTable对象绑定到用户界面
    22.6.1从泛型List合成DataTable
    22.6.2从DataTable中删除行
    22.6.3根据筛选条件选择行
    22.6.4在DataTable中更新行
    22.6.5使用DataView类型
    22.7使用数据适配器
    22.7.1一个简单的数据适配器示例
    22.7.2映射数据库名称为友好名称
    22.8向AutoLotDAL.dll添加断开连接功能
    22.8.1定义初始类类型
    22.8.2使用SqlCommandBuilder来配置数据适配器
    22.8.3实现GetAllInventory
    22.8.4实现UpdateInventory
    22.8.5设置版本号
    22.8.6测试非连接的功能
    22.9多表DataSet对象和数据关系
    22.9.1建立数据适配器
    22.9.2建立表间关系
    22.9.3更新Database表
    22.9.4在关联表中切换
    22.10WindowsForms数据库设计器工具
    22.10.1可视化设计DataGridView
    22.10.2生成的App.config文件
    22.10.3强类型的DataSet
    22.10.4强类型的DataTable
    22.10.5强类型的DataRow
    22.10.6强类型的数据适配器
    22.10.7完成WindowsForms应用程序
    22.11将强类型的数据库代码隔离到类库中
    22.11.1查看生成的代码
    22.11.2用生成的代码选择数据
    22.11.3用生成的代码插入数据
    22.11.4用生成的代码删除数据
    22.11.5用生成的代码调用存储过程
    22.12LINQtoDataSet
    22.12.1DataSetExtensions库的作用
    22.12.2获取与LINQ兼容的DataTable
    22.12.3DataRowExtensions.Field-扩展方法的作用
    22.12.4从LINQ查询中生成新的DataTable
    22.13小结

    第23章ADO.NET之三:EntityFramework
    23.1EntityFramework的作用
    23.1.1实体的作用
    23.1.2EntityFramework的基础知识
    23.2创建和分析EDM
    23.3对概念模型进行编程
    23.4AutoLotDAL4.0版,加入实体
    23.4.1导航属性的作用
    23.4.2在LINQtoEntity查询中使用导航属性
    23.4.3调用存储过程
    23.5将数据实体绑定到WindowsFormsGUI
    23.6展望.NET数据访问API的未来
    23.7小结

    第24章LINQtoXML简介
    24.1两个XMLAPI的故事
    24.1.1更优秀的DOM——LINQtoXML
    24.1.2更优秀的LINQtoXML——VB字面量语法
    24.2System.Xml.Linq命名空间的成员
    24.2.1LINQtoXML的轴方法
    24.2.2奇妙的XName和XNamespace
    24.3使用XElement和XDocument
    24.3.1从数组和容器中生成文档
    24.3.2加载和解析XML内容
    24.4在内存中操作XML文档
    24.4.1构建LINQtoXML应用程序的UI
    24.4.2引入Inventory.xml文件
    24.4.3定义LINQtoXML辅助类
    24.4.4将UI组装到辅助类
    24.5小结

    第25章WCF
    25.1各种分布式计算API
    25.1.1DCOM的作用
    25.1.2COM+/企业服务的作用
    25.1.3MSMQ的作用
    25.1.4.NETRemoting的作用
    25.1.5XMLWeb服务的作用
    25.2WCF的作用
    25.2.1WCF特性概览
    25.2.2SOA概览
    25.2.3WCF概要
    25.3WCF核心程序集
    25.4VisualStudioWCF项目模板
    25.5WCF应用程序的基本构成
    25.6WCF的ABC
    25.6.1WCF契约
    25.6.2WCF绑定
    25.6.3WCF地址
    25.7构建WCF服务
    25.7.1[ServiceContract]特性
    25.7.2[OperationContract]特性
    25.7.3作为操作契约的服务类型
    25.8承载WCF服务
    25.8.1在App.config文件中创建ABC
    25.8.2针对ServiceHost类型进行编程
    25.8.3指定库地址
    25.8.4ServiceHost类型的功能
    25.8.5元素的细节
    25.8.6启用元数据交换
    25.9构建WCF客户端应用程序
    25.9.1使用svcutil.exe生成代理代码
    25.9.2使用VisualStudio生成代理代码
    25.9.3配置基于TCP的绑定
    25.10简化配置设置
    25.10.1使用默认终结点
    25.10.2使用多重绑定公开单独的WCF服务
    25.10.3修改WCF绑定的设置
    25.10.4使用默认的MEX行为配置
    25.10.5刷新客户端代理和选择绑定
    25.11使用WCF服务库项目模板
    25.11.1构建简单的Math服务
    25.11.2使用WcfTestClient.exe测试WCF服务
    25.11.3使用SvcConfigEditor.exe修改配置文件
    25.12以Windows服务承载WCF服务
    25.12.1在代码中指定ABC
    25.12.2启用MEX
    25.12.3创建Windows服务安装程序
    25.12.4安装Windows服务
    25.13从客户端异步调用服务
    25.14定义WCF数据契约
    25.14.1使用Web相关的WCF服务项目模板
    25.14.2实现服务契约
    25.14.3*.svc文件的作用
    25.14.4更新web.config文件
    25.14.5测试服务
    25.15小结

    第26章WindowsWorkflowFoundation简介
    26.1定义业务流程
    26.2构建简单的工作流
    26.3Workflow运行时
    26.3.1使用WorkflowInvoker承载工作流
    26.3.2使用WorkflowApplication承载工作流
    26.3.3第一个工作流示例回顾
    26.4检查Workflow中的活动
    26.4.1控制流活动
    26.4.2流程图活动
    26.4.3消息传递活动
    26.4.4状态机活动
    26.4.5运行时活动与基元活动
    26.4.6事务活动
    26.4.7集合活动和错误处理活动
    26.5构建流程图工作流
    26.5.1在流程图中连接活动
    26.5.2使用InvokeMethod活动
    26.5.3定义工作流变量
    26.5.4使用FlowDecision活动
    26.5.5使用TerminateWorkflow活动
    26.5.6构建“true”条件
    26.5.7使用ForEach活动
    26.5.8完成应用程序
    26.5.9我们做了什么
    26.6在专门的DLL中构建Squence工作流
    26.6.1定义初始化项目
    26.6.2引入程序集和命名空间
    26.6.3定义工作流参数
    26.6.4定义工作流变量
    26.6.5使用Assign活动
    26.6.6使用If和Switch活动
    26.6.7构建自定义代码活动
    26.7使用工作流库
    26.8小结

    第七部分WPF
    第27章WPF和XAML
    27.1WPF背后的动机
    27.1.1统一多种不同的API
    27.1.2通过XAML将关注点分离
    27.1.3提供优化的呈现模型
    27.1.4简化复杂的UI编程
    27.2各种形式的WPF应用程序
    27.2.1传统的桌面应用程序
    27.2.2基于导航的WPF应用程序
    27.2.3XBAP应用程序
    27.2.4WPF/Silverlight关系
    27.3WPF程序集
    27.3.1Application类的作用
    27.3.2Window类的作用
    27.4创建不使用XAML的WPF应用程序
    27.4.1创建强类型的Window类
    27.4.2创建简单的用户界面
    27.4.3与应用程序级别的数据交互
    27.4.4处理Window对象的关闭
    27.4.5拦截鼠标事件
    27.4.6拦截键盘事件
    27.5仅使用XAML构建WPF应用程序
    27.5.1用XAML定义窗体对象
    27.5.2用XAML定义应用对象
    27.5.3通过msbuild.exe处理XAML文件
    27.6将标记转换为.NET程序集
    27.6.1将窗口XAML标记映射到C#代码
    27.6.2BAML的作用
    27.6.3将应用程序XAML标记映射到C#代码
    27.6.4XAML到程序集的过程摘要
    27.7WPFXAML语法
    27.7.1Kaxaml
    27.7.2XAMLXML命名空间和XAML关键字
    27.7.3控制类和成员变量的可见性
    27.7.4XAML元素、XAML特性和类型转换器
    27.7.5XAML属性元素语法
    27.7.6XAML附加属性
    27.7.7XAML标记扩展
    27.8使用代码隐藏文件构建WPF应用程序
    27.8.1为MainWindow类添加代码文件
    27.8.2为MyApp类添加代码文件
    27.8.3用msbuild.exe处理代码文件
    27.9使用VisualStudio构建WPF应用程序
    27.9.1WPF项目模板
    27.9.2工具箱和XAML设计器/编辑器
    27.9.3使用Properties窗口设置属性
    27.9.4使用Properties窗口处理事件
    27.9.5在XAML编辑器中处理事件
    27.9.6DocumentOutline窗口
    27.9.7查看自动生成的代码文件
    27.10使用VisualStudio构建自定义XAML编辑器
    27.10.1设计窗口的GUI
    27.10.2实现Loaded事件
    27.10.3实现按钮的Click事件
    27.10.4实现Closed事件
    27.10.5测试应用程序
    27.10.6探索WPF文档
    27.11小结

    第28章使用WPF控件编程
    28.1WPF核心控件概述
    28.1.1WPFInk控件
    28.1.2WPFDocument控件
    28.1.3WPF公共对话框
    28.1.4文档中的细节
    28.2VisualStudioWPF设计器
    28.2.1在VisualStudio中使用WPF控件
    28.2.2使用DocumentOutline编辑器
    28.3使用面板控制内容布局
    28.3.1在Canvas面板中放置内容
    28.3.2在WrapPanel面板中放置内容
    28.3.3在StackPanel面板中放置内容
    28.3.4在Grid面板中放置内容
    28.3.5在DockPanel面板中放置内容
    28.3.6启用Panel类型的滚动功能
    28.3.7使用VisualStudio设计器配置Panel
    28.4使用嵌套面板构建窗口框架
    28.4.1构建菜单系统
    28.4.2构建工具条
    28.4.3构建状态条
    28.4.4完成UI设计
    28.4.5实现MouseEnter/MouseLeave事件处理程序
    28.4.6实现拼写检查逻辑
    28.5WPF命令
    28.5.1内置的命令对象
    28.5.2将命令连接到Command属性
    28.5.3将命令连接到任意行为
    28.5.4使用Open和Save命令
    28.6深入了解WPFAPI和控件
    28.7构建InkAPI选项卡
    28.7.1设计工具条
    28.7.2RadioButton控件
    28.7.3处理InkAPI选项卡的事件
    28.7.4InkCanvas控件
    28.7.5ComboBox控件
    28.7.6保存、加载和清除InkCanvas数据
    28.8DocumentsAPI
    28.8.1块元素和内联元素
    28.8.2文档布局管理器
    28.9构建Documents选项卡
    28.9.1使用代码填充FlowDocument
    28.9.2启用批注和便签
    28.9.3保存和加载流文档
    28.10WPF数据绑定模型
    28.10.1构建DataBinding选项卡
    28.10.2使用VisualStudio建立数据绑定
    28.10.3DataContext属性
    28.10.4使用IValueConverter进行数据转换
    28.10.5在代码中建立数据绑定
    28.10.6构建DataGrid选项卡
    28.11小结

    第29章WPF图形呈现服务
    29.1理解WPF的图形呈现服务
    29.2使用形状呈现图形数据
    29.2.1在画布中添加矩形、椭圆形和线条
    29.2.2在画布中移除矩形、圆形和线条
    29.2.3折线和多边形
    29.2.4路径
    29.3WPF画刷和画笔
    29.3.1使用VisualStudio配置画刷
    29.3.2在代码中配置画刷
    29.3.3配置画笔
    29.4图形变换
    29.4.1变换概览
    29.4.2变换Canvas数据
    29.5使用VisualStudio变换编辑器
    29.5.1构建初始布局
    29.5.2在设计时应用变换
    29.5.3在代码中变换画布
    29.6使用绘图和几何图形呈现图形数据
    29.6.1使用几何图形构建DrawingBrush
    29.6.2用DrawingBrush进行绘画
    29.6.3在DrawingImage中使用绘图类型
    29.7ExpressionDesign的作用
    29.7.1将示例设计文件导出为XAML
    29.7.2将图像数据导入WPF对象
    29.7.3与熊共舞
    29.8使用可视化层呈现图形数据
    29.9小结

    第30章WPF资源、动画和样式
    30.1理解WPF资源系统
    30.2使用对象(逻辑)资源
    30.2.1Resources属性的作用
    30.2.2定义窗口级别的资源
    30.2.3{StaticResource}标记扩展
    30.2.4{DynamicResource}标记扩展
    30.2.5应用程序级别的资源
    30.2.6定义合并的资源字典
    30.2.7定义只含资源的程序集
    30.3理解WPF动画服务
    30.3.1动画类型的作用
    30.3.2To、From和By属性
    30.3.3Timeline基类的作用
    30.3.4用C#代码创建动画
    30.3.5控制动画的速度
    30.3.6动画的反转和循环
    30.4用XAML创建动画
    30.4.1演示图板的作用
    30.4.2事件触发器的作用
    30.4.3使用不连续的关键帧创建动画
    30.5WPF样式的作用
    30.5.1定义并使用样式
    30.5.2重写样式设置
    30.5.3使用TargetType自动应用样式
    30.5.4继承已有的样式
    30.5.5未命名样式的作用
    30.5.6使用触发器定义样式
    30.5.7使用多个触发器定义样式
    30.5.8动画样式
    30.5.9以编程方式设置样式
    30.6小结

    第31章依赖属性、路由事件和模板
    31.1依赖属性的作用
    31.1.1已知的依赖属性
    31.1.2CLR属性包装器的重要说明
    31.2构建自定义依赖属性
    31.2.1添加数据验证例程
    31.2.2响应属性的改变
    31.3路由事件
    31.3.1路由冒泡事件的作用
    31.3.2继续或中止冒泡
    31.3.3路由隧道事件的作用
    31.4逻辑树、可视树和默认模板
    31.4.1以编程方式查看逻辑树
    31.4.2以编程方式查看可视树
    31.4.3以编程方式查看控件的默认模板
    31.5使用触发器框架构建自定义控件模板
    31.5.1模板资源
    31.5.2使用触发器添加可视提示
    31.5.3{TemplateBinding}标记扩展的作用
    31.5.4ContentPresenter的作用
    31.5.5融合模板和样式
    31.6小结

    第八部分ASP.NETWebForm
    第32章ASP.NETWebForm
    32.1HTTP的作用
    32.1.1HTTP请求/响应循环
    32.1.2HTTP是无状态协议
    32.2Web应用程序和Web服务器
    32.2.1IIS虚拟目录的作用
    32.2.2ASP.NETDevelopmentWebServer
    32.3HTML的作用
    32.3.1HTML文档结构
    32.3.2HTML表单的作用
    32.3.3VisualStudioHTML设计器工具
    32.3.4构建HTML表单
    32.4客户端脚本的作用
    32.5回发到Web服务器
    32.6ASP.NETAPI概览
    32.6.1ASP.NET2.0及其后续版本的主要特性
    32.6.2ASP.NET3.5(和.NET3.5SP1)的主要特性
    32.6.3ASP.NET4.0和4.5的主要特性
    32.7构建单个文件的ASP.NET网页
    32.7.1引用AutoLotDAL.dll
    32.7.2设计UI
    32.7.3添加数据访问逻辑
    32.7.4ASP.NET指令的作用
    32.7.5脚本块
    32.7.6ASP.NET控件声明
    32.8使用代码文件构建ASP.NETWeb页面
    32.8.1引用AutoLotDAL.dll程序集
    32.8.2更新代码文件
    32.8.3调试并跟踪ASP.NET页面
    32.9ASP.NETWebSite和ASP.NETWebApplication
    32.10ASP.NET网站目录结构
    32.10.1引用程序集
    32.10.2App_Code文件夹的作用
    32.11页面类型的继承链
    32.12与传入的HTTP请求交互
    32.12.1获得浏览器统计数据
    32.12.2访问传入的表单数据
    32.12.3IsPostBack属性
    32.13与输出HTTP响应交互
    32.13.1提交HTML内容
    32.13.2重定向用户
    32.14ASP.NET网页的生命周期
    32.14.1AutoEventWireUp特性的作用
    32.14.2Error事件
    32.15web.config文件的作用
    32.16小结

    第33章ASP.NETWeb控件、母版页和主题
    33.1Web控件的本质
    33.1.1服务器端事件处理
    33.1.2AutoPostBack属性
    33.2Control和WebControl基类
    33.2.1枚举所包含的控件
    33.2.2动态添加和删除控件
    33.2.3与动态创建的控件交互
    33.2.4WebControl基类的功能
    33.3ASP.NETWeb控件的类别
    33.3.1关于System.Web.UI.HtmlControls的简短说明
    33.3.2Web控件的文档
    33.4构建ASP.NET汽车网站
    33.4.1使用ASP.NET母版页工作
    33.4.2定义默认的内容页面
    33.4.3设计Inventory内容页面
    33.4.4设计Build-a-Car内容页面
    33.5验证控件的作用
    33.5.1开启客户端JavaScript验证支持
    33.5.2RequiredFieldValidator
    33.5.3RegularExpressionValidator
    33.5.4RangeValidator
    33.5.5CompareValidator
    33.5.6创建ValidationSummary
    33.5.7定义验证分组
    33.6使用主题
    33.6.1*.skin文件
    33.6.2应用网站级别的主题
    33.6.3在页面级别应用主题
    33.6.4SkinID属性
    33.6.5以编程方式分配主题
    33.7小结

    第34章ASP.NET状态管理技术
    34.1状态问题
    34.2ASP.NET状态管理技术
    34.3ASP.NET视图状态的作用
    34.3.1演示视图状态
    34.3.2添加自定义视图状态数据
    34.4Global.asax文件的作用
    34.4.1全局最后异常事件处理程序
    34.4.2HttpApplication基类
    34.5应用程序状态与会话状态的差别
    34.5.1维护应用程序级的状态数据
    34.5.2修改应用程序数据
    34.5.3处理Web应用程序的关闭
    34.6使用应用程序缓存
    34.6.1使用数据缓存
    34.6.2修改*.aspx文件
    34.7维护会话数据
    34.8cookie
    34.8.1创建cookie
    34.8.2读取传入的cookie数据
    34.9元素的作用
    34.9.1在ASP.NET会话状态服务器中保存会话数据
    34.9.2把会话数据保存在专门的数据库中
    34.10ASP.NET用户配置API
    34.10.1ASPNETDB.mdf数据库
    34.10.2在web.config中定义用户配置
    34.10.3以编程方式访问用户配置数据
    34.10.4分组用户配置数据并且持久化自定义对象
    34.11小结
    索引
  • 内容简介:
      《图灵程序设计丛书:精通C#(第6版)》是C#领域久负盛名的经典著作,深入全面地讲解了C#编程语言和。NET平台的核心内容,并结合大量示例剖析相关概念。全书分为八部分:C#和。NET平台、C#核心编程结构、C#面向对象编程、高级C#编程结构、用。NET程序集编程、。NET基础类库、WPF和ASP。NETWebForms。第6版是对第5版的进一步更新和完善,内容涵盖了先进的。NET编程技术和技巧,并准确呈现出C#编程语言的新变化和。NET4。5Framework的新特性。
      《图灵程序设计丛书:精通C#(第6版)》由微软C#MVPAndrewTroelsen编写,第6版专门针对C#5。0和。NET4。5进行了细致入微的修订,是各层次。NET开发人员的必读之作。
  • 作者简介:
      AndrewTroelsen,世界C#专家,微软VisualC#MVP。他是著名的微软技术咨询企业Intertech的合伙人和副总裁,该公司的客户包括微软、霍尼韦尔、美国国家航空航天局等。他曾是MSDN网站和MacTech网站.NET技术帖专家,并经常在业界主要技术会议上发表演讲和开设技术讲座。他还是公认的C#和.NET畅销技术书作家。除本书外,他还著有ProExpressionBlend4、ProVB2008andthe.NET3.5Platform和COMand.NETInteroperability等近二十部.NET技术方面的著作。
  • 目录:
    第一部分C#与.NET平台
    第1章.NET之道
    1.1初识.NET平台
    1.2.NET平台构造块(CLR、CTS和CLS)简介
    1.2.1基础类库的作用
    1.2.2C#的优点
    1.2.3托管代码与非托管代码
    1.3其他支持.NET的编程语言
    1.4.NET程序集概览
    1.4.1CIL的作用
    1.4.2.NET类型元数据的作用
    1.4.3程序集清单的作用
    1.5CTS
    1.5.1CTS类类型
    1.5.2CTS接口类型
    1.5.3CTS结构类型
    1.5.4CTS枚举类型
    1.5.5CTS委托类型
    1.5.6CTS类型成员
    1.5.7内建的CTS数据类型
    1.6CLS
    1.7CLR
    1.8程序集/命名空间/类型的区别
    1.8.1Microsoft根命名空间的作用
    1.8.2以编程方式访问命名空间
    1.8.3引用外部程序集
    1.9使用ildasm.exe探索程序集
    1.9.1查看CIL代码
    1.9.2查看类型元数据
    1.9.3查看程序集元数据(即清单)
    1.10.NET的平台无关性
    1.11Windows8应用程序简介
    1.11.1构建Windows8应用程序
    1.11.2.NET在Windows8中的作用
    1.12小结

    第2章构建C#应用程序
    2.1.NETFramework4.5SDK的作用
    2.2用csc.exe构建C#应用程序
    2.2.1指定输入输出目标
    2.2.2引用外部程序集
    2.2.3引用多个外部程序集
    2.2.4编译多个源文件
    2.2.5使用C#响应文件
    2.3使用Notepad++构建.NET应用程序
    2.4使用SharpDevelop构建.NET应用程序
    2.5使用VisualC#Express构建.NET应用程序
    2.6使用VisualStudio构建.NET应用程序
    2.6.1VisualStudio的独特功能
    2.6.2使用NewProject对话框指向.NETFramework
    2.6.3解决方案资源管理器
    2.6.4ClassView工具
    2.6.5ObjectBrowser工具
    2.6.6集成对代码重构的支持
    2.6.7代码扩展和围绕技术
    2.6.8可视化ClassDesigner
    2.6.9集成的.NETFramework4.5SDK文档系统
    2.7小结

    第二部分C#核心编程结构
    第3章C#核心编程结构Ⅰ
    3.1一个简单的C#程序
    3.1.1Main方法的其他形式
    3.1.2指定应用程序错误代码
    3.1.3处理命令行参数
    3.1.4使用VisualStudio指定命令行参数
    3.2有趣的题外话:System.Environment类的其他成员
    3.3System.Console类
    3.3.1使用Console类进行基本的输入和输出
    3.3.2格式化控制台输出
    3.3.3格式化数值数据
    3.3.4在控制台应用程序外格式化数值数据
    3.4系统数据类型和相应的C#关键字
    3.4.1变量声明和初始化
    3.4.2内建数据类型与new操作符
    3.4.3数据类型类的层次结构
    3.4.4数值数据类型的成员
    3.4.5System.Boolean的成员
    3.4.6System.Char的成员
    3.4.7从字符串数据中解析数值
    3.4.8System.DateTime和System.TimeSpan
    3.4.9System.Numerics.dll程序集
    3.5使用字符串数据
    3.5.1基本的字符串操作
    3.5.2字符串拼接
    3.5.3转义字符
    3.5.4定义逐字字符串
    3.5.5字符串和相等性
    3.5.6字符串是不可变的
    3.5.7System.Text.StringBuilder类型
    3.6窄化和宽化数据类型转换
    3.6.1checked关键字
    3.6.2设定项目级别的溢出检测
    3.6.3unchecked关键字
    3.7隐式类型本地变量
    3.7.1隐式类型变量的限制
    3.7.2隐式类型数据是强类型数据
    3.7.3隐式类型本地变量的用途
    3.8C#迭代结构
    3.8.1for循环
    3.8.2foreach循环
    3.8.3while和do/while循环结构
    3.9条件结构和关系/相等操作符
    3.9.1if/else语句
    3.9.2关系/相等操作符
    3.9.3逻辑操作符
    3.9.4switch语句
    3.10小结

    第4章C#核心编程结构Ⅱ
    4.1方法和参数修饰符
    4.1.1默认的参数传递行为
    4.1.2out修饰符
    4.1.3ref修饰符
    4.1.4params修饰符
    4.1.5定义可选参数
    4.1.6使用命名参数调用方法
    4.1.7成员重载
    4.2C#数组
    4.2.1C#数组初始化语法
    4.2.2隐式类型本地数组
    4.2.3定义object数组
    4.2.4使用多维数组
    4.2.5数组作为参数(和返回值)
    4.2.6System.Array基类
    4.3枚举类型
    4.3.1控制枚举的底层存储
    4.3.2声明枚举变量
    4.3.3System.Enum类型
    4.3.4动态获取枚举的名称/值对
    4.4结构类型
    4.5值类型和引用类型
    4.5.1值类型、引用类型和赋值操作符
    4.5.2包含引用类型的值类型
    4.5.3按值传递引用类型
    4.5.4按引用传递引用类型
    4.5.5值类型和引用类型:最后的细节
    4.6C#可空类型
    4.6.1使用可空类型
    4.6.2??操作符
    4.7小结

    第三部分C#面向对象编程
    第5章封装
    5.1C#类类型
    5.2构造函数
    5.2.1默认构造函数的作用
    5.2.2定义自定义的构造函数
    5.2.3再谈默认构造函数
    5.3this关键字的作用
    5.3.1使用this进行串联构造函数调用
    5.3.2观察构造函数流程
    5.3.3再谈可选参数
    5.4static关键字
    5.4.1定义静态数据
    5.4.2定义静态方法
    5.4.3定义静态构造函数
    5.4.4定义静态类
    5.5定义OOP的支柱
    5.5.1封装的作用
    5.5.2继承的作用
    5.5.3多态的作用
    5.6C#访问修饰符
    5.6.1默认的访问修饰符
    5.6.2访问修饰符和嵌套类型
    5.7第一个支柱:C#的封装服务
    5.7.1使用传统的访问方法和修改方法执行封装
    5.7.2使用.NET属性进行封装
    5.7.3使用类的属性
    5.7.4只读和只写属性
    5.7.5静态属性
    5.8自动属性
    5.8.1与自动属性交互
    5.8.2关于自动属性和默认值
    5.9对象初始化语法
    5.9.1使用初始化语法调用自定义构造函数
    5.9.2初始化内部类型
    5.10常量数据
    5.10.1只读字段
    5.10.2静态只读字段
    5.11分部类型
    5.12小结

    第6章继承和多态
    6.1继承的基本机制
    6.1.1指定既有类的父类
    6.1.2多个基类
    6.1.3sealed关键字
    6.2回顾VisualStudio类关系图
    6.3OOP的第二个支柱:继承
    6.3.1使用base关键字控制基类的创建
    6.3.2家族的秘密:protected关键字
    6.3.3增加密封类
    6.4包含/委托编程
    6.5OOP的第三个支柱:C#的多态支持
    6.5.1virtual和override关键字
    6.5.2使用VisualStudioIDE重写虚方法
    6.5.3密封虚成员
    6.5.4抽象类
    6.5.5构建多态接口
    6.5.6成员投影
    6.6基类/派生类的转换规则
    6.6.1C#的as关键字
    6.6.2C#的is关键字
    6.7超级父类:System.Object
    6.7.1重写System.Object.ToString
    6.7.2重写System.Object.Equals
    6.7.3重写System.Object.GetHashCode
    6.7.4测试修改后的Person类
    6.7.5System.Object的静态成员
    6.8小结

    第7章结构化异常处理
    7.1错误、bug与异常
    7.2.NET异常处理的作用
    7.2.1.NET异常处理的四要素
    7.2.2System.Exception基类
    7.3最简单的例子
    7.3.1引发普通的异常
    7.3.2捕获异常
    7.4配置异常的状态
    7.4.1TargetSite属性
    7.4.2StackTrace属性
    7.4.3HelpLink属性
    7.4.4Data属性
    7.5系统级异常
    7.6应用程序级异常
    7.6.1构建自定义异常,第一部分
    7.6.2构建自定义异常,第二部分
    7.6.3构建自定义异常,第三部分
    7.7处理多个异常
    7.7.1通用的catch语句
    7.7.2再次引发异常
    7.7.3内部异常
    7.7.4finally块
    7.8谁在引发什么异常
    7.9未处理异常的后果
    7.10使用VisualStudio调试未处理的异常
    7.11小结

    第8章接口
    8.1接口类型
    8.2定义自定义接口
    8.3实现接口
    8.4在对象级别调用接口成员
    8.4.1获取接口引用:as关键字
    8.4.2获取接口引用:is关键字
    8.5接口作为参数
    8.6接口作为返回值
    8.7接口类型数组
    8.8使用VisualStudio实现接口
    8.9显式接口实现
    8.10设计接口层次结构
    8.11构建可枚举类型(IEnumerable和IEnumerator)
    8.11.1用yield关键字构建迭代器方法
    8.11.2构建命名迭代器
    8.12构建可克隆的对象(ICloneable)
    8.13构建可比较的对象(IComparable)
    8.13.1指定多个排序顺序
    8.13.2自定义属性、自定义排序类型
    8.14小结

    第四部分高级C#编程结构
    第9章集合与泛型
    9.1集合类的动机
    9.1.1System.Collections命名空间
    9.1.2System.Collections.Specialized命名空间
    9.2非泛型集合的问题
    9.2.1性能问题
    9.2.2类型安全问题
    9.2.3初识泛型集合
    9.3泛型类型参数的作用
    9.3.1为泛型类/结构指定类型参数
    9.3.2为泛型成员指定类型参数
    9.3.3为泛型接口指定类型参数
    9.4System.Collections.Generic命名空间
    9.4.1集合初始化语法
    9.4.2使用List类
    9.4.3使用Stack类
    9.4.4使用Queue类
    9.4.5使用SortedSet类
    9.5System.Collections.ObjectModel命名空间
    9.6创建自定义泛型方法
    9.7创建自定义泛型结构和类
    9.8类型参数的约束
    9.8.1使用where关键字的示例
    9.8.2操作符约束的不足
    9.9小结

    第10章委托、事件和Lambda表达式
    10.1.NET委托类型
    10.1.1在C#中定义委托类型
    10.1.2System.MulticastDelegate与System.Delegate基类
    10.2最简单的委托示例
    10.3使用委托发送对象状态通知
    10.3.1支持多路广播
    10.3.2从委托的调用列表中移除成员
    10.3.3方法组转换语法
    10.4泛型委托
    10.5C#事件
    10.5.1event关键字
    10.5.2揭开事件的神秘面纱
    10.5.3监听传入的事件
    10.5.4使用VisualStudio简化事件注册
    10.5.5创建自定义的事件参数
    10.5.6泛型EventHandler委托
    10.6C#匿名方法
    10.7Lambda表达式
    10.7.1剖析Lambda表达式
    10.7.2使用多个语句处理参数
    10.7.3含有多个(或零个)参数的Lambda表达式
    10.7.4使用Lambda表达式重新编写CarEvents示例
    10.8小结

    第11章高级C#语言特性
    11.1索引器方法
    11.1.1使用字符串值索引对象
    11.1.2重载索引器方法
    11.1.3多维的索引器
    11.1.4在接口类型上定义索引器
    11.2操作符重载
    11.2.1重载二元操作符
    11.2.2+=与-=操作符
    11.2.3重载一元操作符
    11.2.4重载相等操作符
    11.2.5重载比较操作符
    11.2.6操作符重载的最后思考
    11.3自定义类型转换
    11.3.1回顾:数值转换
    11.3.2回顾:相关的类类型间的转换
    11.3.3创建自定义转换例程
    11.3.4Square类型的其他显式转换
    11.3.5定义隐式转换例程
    11.4扩展方法
    11.4.1定义扩展方法
    11.4.2在实例层次上调用扩展方法
    11.4.3导入扩展方法
    11.4.4扩展方法的智能感知
    11.4.5扩展实现了指定接口的类型
    11.5匿名类型
    11.5.1定义匿名类型
    11.5.2匿名类型的内部表示方式
    11.5.3方法ToString和GetHashCode的实现
    11.5.4匿名类型的相等语义
    11.5.5包含匿名类型的匿名类型
    11.6指针类型
    11.6.1unsafe关键字
    11.6.2*和&操作符
    11.6.3不安全(与安全)交换功能
    11.6.4通过指针访问字段
    11.6.5stackalloc关键字
    11.6.6使用fixed关键字固定类型
    11.6.7sizeof关键字
    11.7小结

    第12章LINQtoObject
    12.1LINQ特有的编程结构
    12.1.1隐式类型本地变量
    12.1.2对象和集合初始化语法
    12.1.3Lambda表达式
    12.1.4扩展方法
    12.1.5匿名类型
    12.2LINQ的作用
    12.2.1LINQ表达式是强类型的
    12.2.2核心LINQ程序集
    12.3将LINQ查询应用于原始数组
    12.3.1再一次,不使用LINQ
    12.3.2反射LINQ结果集
    12.3.3LINQ和隐式类型本地变量
    12.3.4LINQ和扩展方法
    12.3.5延迟执行的作用
    12.3.6立即执行的作用
    12.4返回LINQ查询的结果
    12.5将LINQ查询应用到集合对象
    12.5.1访问包含的子对象
    12.5.2将LINQ查询应用于非泛型集合
    12.5.3使用OfType筛选数据
    12.6C#LINQ查询操作符
    12.6.1基本的选择语法
    12.6.2获取数据子集
    12.6.3投影新数据类型
    12.6.4使用Enumerable获取总数
    12.6.5反转结果集
    12.6.6对表达式进行排序
    12.6.7维恩图工具
    12.6.8移除重复
    12.6.9LINQ聚合操作
    12.7LINQ查询语句的内部表示
    12.7.1用查询操作符建立查询表达式(复习)
    12.7.2使用Enumerable类型和Lambda表达式来建立查询表达式
    12.7.3使用Enumerable类型和匿名方法来建立查询表达式
    12.7.4用Enumerable类型和原始委托建立查询表达式
    12.8小结

    第13章对象的生命周期
    13.1类、对象和引用
    13.2对象生命周期的基础
    13.2.1CIL的new指令
    13.2.2将对象引用设置为空
    13.3应用程序根的作用
    13.4对象的代
    13.5.NET1.0至.NET3.5的并发垃圾回收
    13.6.NET4.0及后续版本
    13.7System.GC类型
    13.8构建可终结对象
    13.8.1重写System.Object.Finalize
    13.8.2终结过程的细节
    13.9构建可处置对象
    13.10构建可终结类型和可处置类型
    13.11延迟对象实例化
    13.12小结

    第五部分用.NET程序集编程
    第14章.NET程序集入门
    14.1定义自定义命名空间
    14.1.1使用完全限定名解决命名冲突
    14.1.2使用别名解决命名冲突
    14.1.3创建嵌套的命名空间
    14.1.4VisualStudio的默认命名空间
    14.2.NET程序集的作用
    14.2.1程序集促进代码重用
    14.2.2程序集确定类型边界
    14.2.3程序集是可版本化的单元
    14.2.4程序集是自描述的
    14.2.5程序集是可配置的
    14.3.NET程序集的格式
    14.3.1Windows文件首部
    14.3.2CLR文件首部
    14.3.3CIL代码、类型元数据和程序集清单
    14.3.4可选的程序集资源
    14.4构建和使用自定义类库
    14.4.1清单
    14.4.2CIL
    14.4.3类型元数据
    14.4.4构建C#客户端应用程序
    14.4.5构建VisualBasic客户端应用程序
    14.4.6实现跨语言继承
    14.5私有程序集
    14.5.1私有程序集的标识
    14.5.2探测过程
    14.5.3配置私有程序集
    14.5.4App.Config文件
    14.6共享程序集
    14.6.1全局程序集缓存
    14.6.2强名称
    14.6.3在命令行生成强名称
    14.6.4使用VisualStudio为程序集赋予强名称
    14.6.5在GAC中安装强名称的程序集
    14.7使用共享程序集
    14.8配置共享程序集
    14.8.1冻结当前的共享程序集
    14.8.2构建共享程序集2.0.0.0版本
    14.8.3动态重定向到共享程序集的特定版本
    14.9发行者策略程序集
    14.10元素
    14.11System.Configuration命名空间
    14.12配置文件架构文档
    14.13小结

    第15章类型反射、晚期绑定和基于特性的编程
    15.1类型元数据的必要性
    15.1.1查看(部分)EngineState枚举的元数据
    15.1.2查看(部分)Car类型的元数据
    15.1.3研究TypeRef
    15.1.4记录定义的程序集
    15.1.5记录引用的程序集
    15.1.6记录字符串字面量
    15.2反射
    15.2.1System.Type类
    15.2.2使用System.Object.GetType得到Type引用
    15.2.3使用typeof得到Type引用
    15.2.4使用System.Type.GetType得到Type引用
    15.3构建自定义的元数据查看器
    15.3.1反射方法
    15.3.2反射字段和属性
    15.3.3反射实现的接口
    15.3.4显示其他信息
    15.3.5实现Main
    15.3.6反射泛型类型
    15.3.7反射方法参数和返回值
    15.4动态加载程序集
    15.5反射共享程序集
    15.6晚期绑定
    15.6.1System.Activator类
    15.6.2调用没有参数的方法
    15.6.3调用有参数的方法
    15.7.NET特性的作用
    15.7.1特性的使用者
    15.7.2在C#中使用特性
    15.7.3C#特性简化符号
    15.7.4为特性指定构造参数
    15.7.5Obsolete特性
    15.8构建自定义特性
    15.8.1应用自定义特性
    15.8.2命名属性语法
    15.8.3限制特性使用
    15.9程序集级别特性
    15.10使用早期绑定反射特性
    15.11使用晚期绑定反射特性
    15.12反射、晚期绑定和自定义特性的使用背景
    15.13构建可扩展的应用程序
    15.13.1构建CommonSnappable-Types.dll
    15.13.2构建C#插件
    15.13.3构建VisualBasic插件
    15.13.4构建可扩展的WindowsForms应用程序
    15.14小结

    第16章动态类型和动态语言运行时
    16.1dynamic关键字的作用
    16.1.1调用动态声明的数据的成员
    16.1.2Microsoft.CSharp.dll程序集的作用
    16.1.3dynamic关键字的作用域
    16.1.4dynamic关键字的限制
    16.1.5dynamic关键字的实际用途
    16.2DLR的作用
    16.2.1表达式树的作用
    16.2.2System.Dynamic命名空间的作用
    16.2.3表达式树的动态运行时查找
    16.3使用动态类型简化后期绑定调用
    16.4使用动态数据简化COM互操作
    16.4.1主互操作程序集的作用
    16.4.2嵌入互操作元数据
    16.4.3普通COM互操作的难点
    16.5使用C#动态数据进行COM互操作
    16.6不使用C#动态数据进行COM互操作
    16.7小结

    第17章进程、应用程序域和对象上下文
    17.1Windows进程的作用
    17.2.NET平台下与进程进行交互
    17.2.1列举运行中的进程
    17.2.2特定的进程
    17.2.3进程的线程集合
    17.2.4进程中的模块集合
    17.2.5以编程方式启动或结束进程
    17.2.6使用ProcessStartInfo类控制进程的启动
    17.3.NET应用程序域
    17.4与默认应用程序域进行交互
    17.4.1枚举加载的程序集
    17.4.2接收程序集加载通知
    17.5创建新的应用程序域
    17.5.1在自定义应用程序域中加载程序集
    17.5.2以编程方式卸载应用程序域
    17.6对象上下文边界
    17.6.1上下文灵活和上下文绑定类型
    17.6.2定义上下文绑定对象
    17.6.3研究对象的上下文
    17.7进程、应用程序域和上下文小结
    17.8小结

    第18章CIL和动态程序集的作用
    18.1学习CIL语法的原因
    18.2CIL指令、特性和操作码
    18.2.1CIL指令的作用
    18.2.2CIL特性的作用
    18.2.3CIL操作码的作用
    18.2.4区别CIL操作码和CIL助记符
    18.3入栈和出栈:CIL基于栈的本质
    18.4正反向工程
    18.4.1CIL代码标签的作用
    18.4.2与CIL交互:修改*.il文件
    18.4.3使用ilasm.exe编译CIL代码
    18.4.4peverify.exe的作用
    18.5CIL指令和特性
    18.5.1在CIL中指定外部引用程序集
    18.5.2在CIL中定义当前程序集
    18.5.3在CIL中定义命名空间
    18.5.4在CIL中定义类类型
    18.5.5在CIL中定义和实现接口
    18.5.6在CIL中定义结构
    18.5.7在CIL中定义枚举
    18.5.8在CIL中定义泛型
    18.5.9编译CILTypes.il文件
    18.6.NET基础类库、C#和CIL数据类型的映射
    18.7在CIL中定义类型成员
    18.7.1在CIL中定义数据字段
    18.7.2在CIL中定义类型的构造函数
    18.7.3在CIL中定义属性
    18.7.4定义成员参数
    18.8剖析CIL操作码
    18.8.1.maxstack指令
    18.8.2在CIL中声明本地变量
    18.8.3在CIL中映射参数到本地变量
    18.8.4this隐式引用
    18.8.5在CIL中使用循环结构
    18.9使用CIL构建.NET程序集
    18.9.1构建CILCars.dll
    18.9.2构建CILCarClient.exe
    18.10动态程序集
    18.10.1System.Reflection.Emit命名空间
    18.10.2System.Reflection.Emit.ILGenerator的作用
    18.10.3产生动态的程序集
    18.10.4产生程序集和模块集
    18.10.5ModuleBuilder类型的作用
    18.10.6产生HelloClass类型和字符串成员变量
    18.10.7产生构造函数
    18.10.8产生SayHello方法
    18.10.9使用动态产生的程序集
    18.11小结

    第六部分.NET基础类库
    第19章多线程、并行和异步编程
    19.1进程、应用程序域、上下文及线程之间的关系
    19.1.1并发问题
    19.1.2线程同步的作用
    19.2.NET委托的简短回顾
    19.3委托的异步性
    19.3.1BeginInvoke和EndInvoke方法
    19.3.2System.IAsyncResult接口
    19.4异步调用方法
    19.4.1同步调用线程
    19.4.2AsyncCallback委托的作用
    19.4.3AsyncResult类的作用
    19.4.4传递和接收自定义状态数据
    19.5System.Threading命名空间
    19.6System.Threading.Thread类
    19.6.1获得当前执行线程的统计信息
    19.6.2Name属性
    19.6.3Priority属性
    19.7手工创建次线程
    19.7.1使用ThreadStart委托
    19.7.2使用ParameterizedThreadStart委托
    19.7.3AutoResetEvent类
    19.7.4前台线程和后台线程
    19.8并发问题
    19.8.1使用C#的lock关键字进行同步
    19.8.2使用System.Threading.Monitor类型进行同步
    19.8.3使用System.Threading.Interlocked类型进行同步
    19.8.4使用[Synchronization]特性进行同步
    19.9使用TimerCallback编程
    19.10CLR线程池
    19.11使用任务并行库进行并行编程
    19.11.1任务并行库API
    19.11.2Parallel类的作用
    19.11.3使用Parallel类的数据并行
    19.11.4在次线程中访问UI元素
    19.11.5Task类
    19.11.6处理取消请求
    19.11.7使用并行类的任务并行
    19.12并行LINQ查询(PLINQ)
    19.12.1使用PLINQ查询
    19.12.2取消PLINQ查询
    19.13.NET4.5下的异步调用
    19.13.1C#async和await关键字初探
    19.13.2异步方法的命名约定
    19.13.3返回void的异步方法
    19.13.4具有多个await的异步方法
    19.13.5用async/await改进AddWithThreads示例
    19.14小结

    第20章文件输入输出和对象序列化
    20.1研究System.IO命名空间
    20.2Directory(Info)和File(Info)类型
    20.3使用DirectoryInfo类型
    20.3.1使用DirectoryInfo类型枚举出文件
    20.3.2使用DirectoryInfo类型创建子目录
    20.4使用Directory类型
    20.5使用DriveInfo类类型
    20.6使用FileInfo类
    20.6.1FileInfo.Create方法
    20.6.2FileInfo.Open方法
    20.6.3FileInfo.OpenRead和FileInfo.OpenWrite方法
    20.6.4FileInfo.OpenText方法
    20.6.5FileInfo.CreateText和FileInfo.AppendText方法
    20.7使用File类型
    20.8Stream抽象类
    20.9使用StreamWriter和StreamReader类型
    20.9.1写文本文件
    20.9.2读文本文件
    20.9.3直接创建StreamWriter/StreamReader类型
    20.10使用StringWriter和StringReader类型
    20.11使用BinaryWriter和BinaryReader
    20.12以编程方式“观察”文件
    20.13对象序列化
    20.14为序列化配置对象
    20.14.1定义可序列化的类型
    20.14.2公共字段、私有字段和公共属性
    20.15选择序列化格式化程序
    20.15.1IFormatter和IRemoting-Formatting接口
    20.15.2在格式化程序中的类型保真
    20.16使用BinaryFormatter序列化对象
    20.17使用SoapFormatter序列化对象
    20.18使用XmlSerializer序列化对象
    20.19序列化对象集合
    20.20自定义Soap/Binary序列化过程
    20.20.1深入了解对象序列化
    20.20.2使用ISerializable自定义序列化
    20.20.3使用特性定制序列化
    20.21小结

    第21章ADO.NET之一:连接层
    21.1ADO.NET的宏观定义
    21.2ADO.NET数据提供程序
    21.2.1微软提供的ADO.NET数据提供程序
    21.2.2关于System.Data.Oracle-Client.dll
    21.2.3选择第三方的数据提供程序
    21.3其他的ADO.NET命名空间
    21.4System.Data命名空间的类型
    21.4.1IDbConnection接口的作用
    21.4.2IDbTransaction接口的作用
    21.4.3IDbCommand接口的作用
    21.4.4IDbDataParameter和IDataParameter接口的作用
    21.4.5IDbDataAdapter和IDataAdapter接口的作用
    21.4.6IDataReader和IDataRecord接口的作用
    21.5使用接口的抽象数据提供程序
    21.6创建AutoLot数据库
    21.6.1创建Inventory表
    21.6.2为Inventory表添加测试记录
    21.6.3编写GetPetName存储过程
    21.6.4创建Customers和Orders表
    21.6.5可视化创建表关系
    21.7ADO.NET数据提供程序工厂模型
    21.7.1完整的数据提供程序工厂的例子
    21.7.2数据提供程序工厂模型的潜在缺陷
    21.7.3元素
    21.8ADO.NET的连接层
    21.8.1使用连接对象
    21.8.2使用ConnectionStringBuilder对象
    21.8.3使用命令对象
    21.9使用数据读取器
    21.10构建可重用的数据访问库
    21.10.1增加连接逻辑
    21.10.2增加插入逻辑
    21.10.3增加删除逻辑
    21.10.4增加更新逻辑
    21.10.5增加选择逻辑
    21.10.6使用参数化的命令对象
    21.10.7执行存储过程
    21.11创建控制台UI前端
    21.11.1实现Main方法
    21.11.2实现ShowInstructions方法
    21.11.3实现ListInventory方法
    21.11.4实现DeleteCar方法
    21.11.5实现InsertNewCar方法
    21.11.6实现UpdateCarPetName方法
    21.11.7实现LookUpPetName
    21.12数据库事务
    21.12.1ADO.NET事务对象的主要成员
    21.12.2为AutoLot数据库添加CreditRisks表
    21.12.3为InventoryDAL添加事物方法
    21.12.4测试数据库事务
    21.13小结

    第22章ADO.NET之二:断开连接层
    22.1ADO.NET断开连接层
    22.2DataSet的作用
    22.2.1DataSet的主要属性
    22.2.2DataSet的主要方法
    22.2.3构建DataSet
    22.3使用DataColumn
    22.3.1构建DataColumn
    22.3.2启用自增列
    22.3.3把DataColumn对象加入DataTable
    22.4使用DataRow
    22.4.1RowState属性
    22.4.2DataRowVersion属性
    22.5使用DataTable
    22.5.1将DataTable插入到DataSet中
    22.5.2获取DataSet中的数据
    22.5.3使用DataTableReader对象处理DataTable
    22.5.4序列化DataTable/DataSet对象为XML
    22.5.5以二进制格式序列化Data-Table/DataSet对象
    22.6将DataTable对象绑定到用户界面
    22.6.1从泛型List合成DataTable
    22.6.2从DataTable中删除行
    22.6.3根据筛选条件选择行
    22.6.4在DataTable中更新行
    22.6.5使用DataView类型
    22.7使用数据适配器
    22.7.1一个简单的数据适配器示例
    22.7.2映射数据库名称为友好名称
    22.8向AutoLotDAL.dll添加断开连接功能
    22.8.1定义初始类类型
    22.8.2使用SqlCommandBuilder来配置数据适配器
    22.8.3实现GetAllInventory
    22.8.4实现UpdateInventory
    22.8.5设置版本号
    22.8.6测试非连接的功能
    22.9多表DataSet对象和数据关系
    22.9.1建立数据适配器
    22.9.2建立表间关系
    22.9.3更新Database表
    22.9.4在关联表中切换
    22.10WindowsForms数据库设计器工具
    22.10.1可视化设计DataGridView
    22.10.2生成的App.config文件
    22.10.3强类型的DataSet
    22.10.4强类型的DataTable
    22.10.5强类型的DataRow
    22.10.6强类型的数据适配器
    22.10.7完成WindowsForms应用程序
    22.11将强类型的数据库代码隔离到类库中
    22.11.1查看生成的代码
    22.11.2用生成的代码选择数据
    22.11.3用生成的代码插入数据
    22.11.4用生成的代码删除数据
    22.11.5用生成的代码调用存储过程
    22.12LINQtoDataSet
    22.12.1DataSetExtensions库的作用
    22.12.2获取与LINQ兼容的DataTable
    22.12.3DataRowExtensions.Field-扩展方法的作用
    22.12.4从LINQ查询中生成新的DataTable
    22.13小结

    第23章ADO.NET之三:EntityFramework
    23.1EntityFramework的作用
    23.1.1实体的作用
    23.1.2EntityFramework的基础知识
    23.2创建和分析EDM
    23.3对概念模型进行编程
    23.4AutoLotDAL4.0版,加入实体
    23.4.1导航属性的作用
    23.4.2在LINQtoEntity查询中使用导航属性
    23.4.3调用存储过程
    23.5将数据实体绑定到WindowsFormsGUI
    23.6展望.NET数据访问API的未来
    23.7小结

    第24章LINQtoXML简介
    24.1两个XMLAPI的故事
    24.1.1更优秀的DOM——LINQtoXML
    24.1.2更优秀的LINQtoXML——VB字面量语法
    24.2System.Xml.Linq命名空间的成员
    24.2.1LINQtoXML的轴方法
    24.2.2奇妙的XName和XNamespace
    24.3使用XElement和XDocument
    24.3.1从数组和容器中生成文档
    24.3.2加载和解析XML内容
    24.4在内存中操作XML文档
    24.4.1构建LINQtoXML应用程序的UI
    24.4.2引入Inventory.xml文件
    24.4.3定义LINQtoXML辅助类
    24.4.4将UI组装到辅助类
    24.5小结

    第25章WCF
    25.1各种分布式计算API
    25.1.1DCOM的作用
    25.1.2COM+/企业服务的作用
    25.1.3MSMQ的作用
    25.1.4.NETRemoting的作用
    25.1.5XMLWeb服务的作用
    25.2WCF的作用
    25.2.1WCF特性概览
    25.2.2SOA概览
    25.2.3WCF概要
    25.3WCF核心程序集
    25.4VisualStudioWCF项目模板
    25.5WCF应用程序的基本构成
    25.6WCF的ABC
    25.6.1WCF契约
    25.6.2WCF绑定
    25.6.3WCF地址
    25.7构建WCF服务
    25.7.1[ServiceContract]特性
    25.7.2[OperationContract]特性
    25.7.3作为操作契约的服务类型
    25.8承载WCF服务
    25.8.1在App.config文件中创建ABC
    25.8.2针对ServiceHost类型进行编程
    25.8.3指定库地址
    25.8.4ServiceHost类型的功能
    25.8.5元素的细节
    25.8.6启用元数据交换
    25.9构建WCF客户端应用程序
    25.9.1使用svcutil.exe生成代理代码
    25.9.2使用VisualStudio生成代理代码
    25.9.3配置基于TCP的绑定
    25.10简化配置设置
    25.10.1使用默认终结点
    25.10.2使用多重绑定公开单独的WCF服务
    25.10.3修改WCF绑定的设置
    25.10.4使用默认的MEX行为配置
    25.10.5刷新客户端代理和选择绑定
    25.11使用WCF服务库项目模板
    25.11.1构建简单的Math服务
    25.11.2使用WcfTestClient.exe测试WCF服务
    25.11.3使用SvcConfigEditor.exe修改配置文件
    25.12以Windows服务承载WCF服务
    25.12.1在代码中指定ABC
    25.12.2启用MEX
    25.12.3创建Windows服务安装程序
    25.12.4安装Windows服务
    25.13从客户端异步调用服务
    25.14定义WCF数据契约
    25.14.1使用Web相关的WCF服务项目模板
    25.14.2实现服务契约
    25.14.3*.svc文件的作用
    25.14.4更新web.config文件
    25.14.5测试服务
    25.15小结

    第26章WindowsWorkflowFoundation简介
    26.1定义业务流程
    26.2构建简单的工作流
    26.3Workflow运行时
    26.3.1使用WorkflowInvoker承载工作流
    26.3.2使用WorkflowApplication承载工作流
    26.3.3第一个工作流示例回顾
    26.4检查Workflow中的活动
    26.4.1控制流活动
    26.4.2流程图活动
    26.4.3消息传递活动
    26.4.4状态机活动
    26.4.5运行时活动与基元活动
    26.4.6事务活动
    26.4.7集合活动和错误处理活动
    26.5构建流程图工作流
    26.5.1在流程图中连接活动
    26.5.2使用InvokeMethod活动
    26.5.3定义工作流变量
    26.5.4使用FlowDecision活动
    26.5.5使用TerminateWorkflow活动
    26.5.6构建“true”条件
    26.5.7使用ForEach活动
    26.5.8完成应用程序
    26.5.9我们做了什么
    26.6在专门的DLL中构建Squence工作流
    26.6.1定义初始化项目
    26.6.2引入程序集和命名空间
    26.6.3定义工作流参数
    26.6.4定义工作流变量
    26.6.5使用Assign活动
    26.6.6使用If和Switch活动
    26.6.7构建自定义代码活动
    26.7使用工作流库
    26.8小结

    第七部分WPF
    第27章WPF和XAML
    27.1WPF背后的动机
    27.1.1统一多种不同的API
    27.1.2通过XAML将关注点分离
    27.1.3提供优化的呈现模型
    27.1.4简化复杂的UI编程
    27.2各种形式的WPF应用程序
    27.2.1传统的桌面应用程序
    27.2.2基于导航的WPF应用程序
    27.2.3XBAP应用程序
    27.2.4WPF/Silverlight关系
    27.3WPF程序集
    27.3.1Application类的作用
    27.3.2Window类的作用
    27.4创建不使用XAML的WPF应用程序
    27.4.1创建强类型的Window类
    27.4.2创建简单的用户界面
    27.4.3与应用程序级别的数据交互
    27.4.4处理Window对象的关闭
    27.4.5拦截鼠标事件
    27.4.6拦截键盘事件
    27.5仅使用XAML构建WPF应用程序
    27.5.1用XAML定义窗体对象
    27.5.2用XAML定义应用对象
    27.5.3通过msbuild.exe处理XAML文件
    27.6将标记转换为.NET程序集
    27.6.1将窗口XAML标记映射到C#代码
    27.6.2BAML的作用
    27.6.3将应用程序XAML标记映射到C#代码
    27.6.4XAML到程序集的过程摘要
    27.7WPFXAML语法
    27.7.1Kaxaml
    27.7.2XAMLXML命名空间和XAML关键字
    27.7.3控制类和成员变量的可见性
    27.7.4XAML元素、XAML特性和类型转换器
    27.7.5XAML属性元素语法
    27.7.6XAML附加属性
    27.7.7XAML标记扩展
    27.8使用代码隐藏文件构建WPF应用程序
    27.8.1为MainWindow类添加代码文件
    27.8.2为MyApp类添加代码文件
    27.8.3用msbuild.exe处理代码文件
    27.9使用VisualStudio构建WPF应用程序
    27.9.1WPF项目模板
    27.9.2工具箱和XAML设计器/编辑器
    27.9.3使用Properties窗口设置属性
    27.9.4使用Properties窗口处理事件
    27.9.5在XAML编辑器中处理事件
    27.9.6DocumentOutline窗口
    27.9.7查看自动生成的代码文件
    27.10使用VisualStudio构建自定义XAML编辑器
    27.10.1设计窗口的GUI
    27.10.2实现Loaded事件
    27.10.3实现按钮的Click事件
    27.10.4实现Closed事件
    27.10.5测试应用程序
    27.10.6探索WPF文档
    27.11小结

    第28章使用WPF控件编程
    28.1WPF核心控件概述
    28.1.1WPFInk控件
    28.1.2WPFDocument控件
    28.1.3WPF公共对话框
    28.1.4文档中的细节
    28.2VisualStudioWPF设计器
    28.2.1在VisualStudio中使用WPF控件
    28.2.2使用DocumentOutline编辑器
    28.3使用面板控制内容布局
    28.3.1在Canvas面板中放置内容
    28.3.2在WrapPanel面板中放置内容
    28.3.3在StackPanel面板中放置内容
    28.3.4在Grid面板中放置内容
    28.3.5在DockPanel面板中放置内容
    28.3.6启用Panel类型的滚动功能
    28.3.7使用VisualStudio设计器配置Panel
    28.4使用嵌套面板构建窗口框架
    28.4.1构建菜单系统
    28.4.2构建工具条
    28.4.3构建状态条
    28.4.4完成UI设计
    28.4.5实现MouseEnter/MouseLeave事件处理程序
    28.4.6实现拼写检查逻辑
    28.5WPF命令
    28.5.1内置的命令对象
    28.5.2将命令连接到Command属性
    28.5.3将命令连接到任意行为
    28.5.4使用Open和Save命令
    28.6深入了解WPFAPI和控件
    28.7构建InkAPI选项卡
    28.7.1设计工具条
    28.7.2RadioButton控件
    28.7.3处理InkAPI选项卡的事件
    28.7.4InkCanvas控件
    28.7.5ComboBox控件
    28.7.6保存、加载和清除InkCanvas数据
    28.8DocumentsAPI
    28.8.1块元素和内联元素
    28.8.2文档布局管理器
    28.9构建Documents选项卡
    28.9.1使用代码填充FlowDocument
    28.9.2启用批注和便签
    28.9.3保存和加载流文档
    28.10WPF数据绑定模型
    28.10.1构建DataBinding选项卡
    28.10.2使用VisualStudio建立数据绑定
    28.10.3DataContext属性
    28.10.4使用IValueConverter进行数据转换
    28.10.5在代码中建立数据绑定
    28.10.6构建DataGrid选项卡
    28.11小结

    第29章WPF图形呈现服务
    29.1理解WPF的图形呈现服务
    29.2使用形状呈现图形数据
    29.2.1在画布中添加矩形、椭圆形和线条
    29.2.2在画布中移除矩形、圆形和线条
    29.2.3折线和多边形
    29.2.4路径
    29.3WPF画刷和画笔
    29.3.1使用VisualStudio配置画刷
    29.3.2在代码中配置画刷
    29.3.3配置画笔
    29.4图形变换
    29.4.1变换概览
    29.4.2变换Canvas数据
    29.5使用VisualStudio变换编辑器
    29.5.1构建初始布局
    29.5.2在设计时应用变换
    29.5.3在代码中变换画布
    29.6使用绘图和几何图形呈现图形数据
    29.6.1使用几何图形构建DrawingBrush
    29.6.2用DrawingBrush进行绘画
    29.6.3在DrawingImage中使用绘图类型
    29.7ExpressionDesign的作用
    29.7.1将示例设计文件导出为XAML
    29.7.2将图像数据导入WPF对象
    29.7.3与熊共舞
    29.8使用可视化层呈现图形数据
    29.9小结

    第30章WPF资源、动画和样式
    30.1理解WPF资源系统
    30.2使用对象(逻辑)资源
    30.2.1Resources属性的作用
    30.2.2定义窗口级别的资源
    30.2.3{StaticResource}标记扩展
    30.2.4{DynamicResource}标记扩展
    30.2.5应用程序级别的资源
    30.2.6定义合并的资源字典
    30.2.7定义只含资源的程序集
    30.3理解WPF动画服务
    30.3.1动画类型的作用
    30.3.2To、From和By属性
    30.3.3Timeline基类的作用
    30.3.4用C#代码创建动画
    30.3.5控制动画的速度
    30.3.6动画的反转和循环
    30.4用XAML创建动画
    30.4.1演示图板的作用
    30.4.2事件触发器的作用
    30.4.3使用不连续的关键帧创建动画
    30.5WPF样式的作用
    30.5.1定义并使用样式
    30.5.2重写样式设置
    30.5.3使用TargetType自动应用样式
    30.5.4继承已有的样式
    30.5.5未命名样式的作用
    30.5.6使用触发器定义样式
    30.5.7使用多个触发器定义样式
    30.5.8动画样式
    30.5.9以编程方式设置样式
    30.6小结

    第31章依赖属性、路由事件和模板
    31.1依赖属性的作用
    31.1.1已知的依赖属性
    31.1.2CLR属性包装器的重要说明
    31.2构建自定义依赖属性
    31.2.1添加数据验证例程
    31.2.2响应属性的改变
    31.3路由事件
    31.3.1路由冒泡事件的作用
    31.3.2继续或中止冒泡
    31.3.3路由隧道事件的作用
    31.4逻辑树、可视树和默认模板
    31.4.1以编程方式查看逻辑树
    31.4.2以编程方式查看可视树
    31.4.3以编程方式查看控件的默认模板
    31.5使用触发器框架构建自定义控件模板
    31.5.1模板资源
    31.5.2使用触发器添加可视提示
    31.5.3{TemplateBinding}标记扩展的作用
    31.5.4ContentPresenter的作用
    31.5.5融合模板和样式
    31.6小结

    第八部分ASP.NETWebForm
    第32章ASP.NETWebForm
    32.1HTTP的作用
    32.1.1HTTP请求/响应循环
    32.1.2HTTP是无状态协议
    32.2Web应用程序和Web服务器
    32.2.1IIS虚拟目录的作用
    32.2.2ASP.NETDevelopmentWebServer
    32.3HTML的作用
    32.3.1HTML文档结构
    32.3.2HTML表单的作用
    32.3.3VisualStudioHTML设计器工具
    32.3.4构建HTML表单
    32.4客户端脚本的作用
    32.5回发到Web服务器
    32.6ASP.NETAPI概览
    32.6.1ASP.NET2.0及其后续版本的主要特性
    32.6.2ASP.NET3.5(和.NET3.5SP1)的主要特性
    32.6.3ASP.NET4.0和4.5的主要特性
    32.7构建单个文件的ASP.NET网页
    32.7.1引用AutoLotDAL.dll
    32.7.2设计UI
    32.7.3添加数据访问逻辑
    32.7.4ASP.NET指令的作用
    32.7.5脚本块
    32.7.6ASP.NET控件声明
    32.8使用代码文件构建ASP.NETWeb页面
    32.8.1引用AutoLotDAL.dll程序集
    32.8.2更新代码文件
    32.8.3调试并跟踪ASP.NET页面
    32.9ASP.NETWebSite和ASP.NETWebApplication
    32.10ASP.NET网站目录结构
    32.10.1引用程序集
    32.10.2App_Code文件夹的作用
    32.11页面类型的继承链
    32.12与传入的HTTP请求交互
    32.12.1获得浏览器统计数据
    32.12.2访问传入的表单数据
    32.12.3IsPostBack属性
    32.13与输出HTTP响应交互
    32.13.1提交HTML内容
    32.13.2重定向用户
    32.14ASP.NET网页的生命周期
    32.14.1AutoEventWireUp特性的作用
    32.14.2Error事件
    32.15web.config文件的作用
    32.16小结

    第33章ASP.NETWeb控件、母版页和主题
    33.1Web控件的本质
    33.1.1服务器端事件处理
    33.1.2AutoPostBack属性
    33.2Control和WebControl基类
    33.2.1枚举所包含的控件
    33.2.2动态添加和删除控件
    33.2.3与动态创建的控件交互
    33.2.4WebControl基类的功能
    33.3ASP.NETWeb控件的类别
    33.3.1关于System.Web.UI.HtmlControls的简短说明
    33.3.2Web控件的文档
    33.4构建ASP.NET汽车网站
    33.4.1使用ASP.NET母版页工作
    33.4.2定义默认的内容页面
    33.4.3设计Inventory内容页面
    33.4.4设计Build-a-Car内容页面
    33.5验证控件的作用
    33.5.1开启客户端JavaScript验证支持
    33.5.2RequiredFieldValidator
    33.5.3RegularExpressionValidator
    33.5.4RangeValidator
    33.5.5CompareValidator
    33.5.6创建ValidationSummary
    33.5.7定义验证分组
    33.6使用主题
    33.6.1*.skin文件
    33.6.2应用网站级别的主题
    33.6.3在页面级别应用主题
    33.6.4SkinID属性
    33.6.5以编程方式分配主题
    33.7小结

    第34章ASP.NET状态管理技术
    34.1状态问题
    34.2ASP.NET状态管理技术
    34.3ASP.NET视图状态的作用
    34.3.1演示视图状态
    34.3.2添加自定义视图状态数据
    34.4Global.asax文件的作用
    34.4.1全局最后异常事件处理程序
    34.4.2HttpApplication基类
    34.5应用程序状态与会话状态的差别
    34.5.1维护应用程序级的状态数据
    34.5.2修改应用程序数据
    34.5.3处理Web应用程序的关闭
    34.6使用应用程序缓存
    34.6.1使用数据缓存
    34.6.2修改*.aspx文件
    34.7维护会话数据
    34.8cookie
    34.8.1创建cookie
    34.8.2读取传入的cookie数据
    34.9元素的作用
    34.9.1在ASP.NET会话状态服务器中保存会话数据
    34.9.2把会话数据保存在专门的数据库中
    34.10ASP.NET用户配置API
    34.10.1ASPNETDB.mdf数据库
    34.10.2在web.config中定义用户配置
    34.10.3以编程方式访问用户配置数据
    34.10.4分组用户配置数据并且持久化自定义对象
    34.11小结
    索引
查看详情
系列丛书 / 更多
精通C#(第6版)
机器学习实战
[美]Peter Harrington 著;李锐、李鹏、曲亚东 译
精通C#(第6版)
图灵程序设计丛书:Python基础教程
[挪威]Magnus Lie Hetland 著;司维、曾军崴、谭颖华 译
精通C#(第6版)
Python编程:从入门到实践
[美]埃里克·马瑟斯(Eric Matthes) 著;袁国忠 译
精通C#(第6版)
JavaScript高级程序设计(第3版)
[美]Nicholas C.Zakas 著;李松峰、曹力 译
精通C#(第6版)
R语言实战(第2版)
[美]卡巴科弗(Robert I. Kabacoff) 著;王小宁、刘撷芯、黄俊文 译
精通C#(第6版)
算法(第4版)
[美]Robert、[美]Kevin Wayne 著;谢路云 译
精通C#(第6版)
大数据:互联网大规模数据挖掘与分布式处理
[美]Anand、[美]Jeffrey David Ullman 著;王斌 译
精通C#(第6版)
Spark快速大数据分析
[美]卡劳(Holden Karau)、[美]肯维尼斯科(Andy Konwinski)、[美]温德尔(Patrick Wendell)、[加拿大]扎哈里亚(Matei Zaharia) 著;王道远 译
精通C#(第6版)
MySQL必知必会
[英]福塔(Ben Forta) 著;刘晓霞、钟鸣 译
精通C#(第6版)
图解HTTP
[日]上野·宣 著;于均良 译
精通C#(第6版)
算法图解
袁国忠 译
精通C#(第6版)
Spring Boot实战
[美]克雷格·沃斯(Craig Walls) 著;丁雪丰 译
相关图书 / 更多
精通C#(第6版)
精通Excel数据统计与分析
李宗璋
精通C#(第6版)
精通 Power Query
(加拿大)肯·普尔斯
精通C#(第6版)
精通推荐算法:核心模块+经典模型+代码详解
谢杨易
精通C#(第6版)
精通式学习法:基于提高学生能力的学习方法(“翻转课堂”先行者乔纳森·伯格曼最新作品,众多教育名家联袂推荐)
(美)乔纳森·伯格曼著,段文静译;中青文 出品
精通C#(第6版)
精通STM32F4(HAL库版)(下)
刘军 凌柱宁 徐伟健 江荧
精通C#(第6版)
精通STM32F4(HAL库版)(上)
刘军 凌柱宁 徐伟健 江荧
精通C#(第6版)
精通FrontPage XP(中文版)
中国IT培训工程编委会 编
精通C#(第6版)
精通AI虚拟数字人制作与应用:直播主播+视频博主+营销推广+教育培训 短视频 直播 营销 教育等领域的高效生产力 附赠超值学习资源
木白 编著
精通C#(第6版)
精通咬合重建——解读牙列不齐、牙周病、多牙缺失
吴松涛 周茂强 译;[日]上田 秀朗
精通C#(第6版)
精通Shiny(Mastering Shiny)
Hadley Wickham
精通C#(第6版)
精通Apache Pulsar:可伸缩云原生事件流实践
[美]Jowanza Joseph(乔万扎·约瑟夫
精通C#(第6版)
精通嵌入式Linux编程
[美]弗兰克·瓦斯奎兹 著;陈会翔 译
您可能感兴趣 / 更多
精通C#(第6版)
归属感:如何通过社群获得商业竞争优势
[美]大卫·斯平克斯(David Spinks) 著;颉腾文化 出品
精通C#(第6版)
《城市的夜晚》2024百班千人暑期书目小学生1年级名师推荐全新正版现货速发
[美]朱莉·唐宁 著;冷玉斌 冷念则 译
精通C#(第6版)
雪花的故事(用照片展示雪花的秘密,为你揭开冬日奇景的奥秘)
[美]马克·卡西诺[美]乔恩·尼尔森
精通C#(第6版)
进阶书系-国际史的技艺
[美] 马克·特拉亨伯格
精通C#(第6版)
杜甫传
[美]弗洛伦斯.艾思柯
精通C#(第6版)
神奇的数字零:从数字0开始的极简数学史和人类发展史
[美]查尔斯·塞弗(Charles Seife)著 杨杨立汝 译
精通C#(第6版)
爵士乐史(精装本)
[美]泰德·乔亚 著
精通C#(第6版)
环境的科学 (平装版)
[美]威廉·坎宁安 后浪
精通C#(第6版)
美利坚在燃烧:20世纪60年代以来的警察暴力与黑人反抗
[美]伊丽莎白·欣顿 著 胡位钧 译
精通C#(第6版)
数学侦探 游乐园里的古怪笑脸
[美]丹尼尔·肯尼 艾米丽·博艾尔 著 刘玙婧、王婧 译;小博集出品
精通C#(第6版)
儒教中国及其现代命运(三部曲)
[美]列文森 作者;[中]季剑青 译者
精通C#(第6版)
逃家小兔成长绘本系列
[美]玛格丽特.怀兹.布朗