提升C#和.NET技能的必备参考资源 Visual Studio 2015、ASP.NET Core 1.0和Universal Windows Platform的推出,为开发人员提供了使用C#创建应用程序的新方式。作为经典C#畅销书 ,本书涵盖了充分利用升级功能,积极简化工作流程所需的全部信息。本书循序渐进地讲解了Visual Studio 2015、.NET Core 1.0、ASP.NET MVC、Universal Windows Platform、WPF的变化。每一章都提供了清晰的解释、下载的代码,并从专家的角度提供了有价值的视野。有本书在手,读者可以快速获得的特性和功能。 主要内容 通过.NET Core 和C# 6的增强功能,重新塑造了.NET平台,包括新增的.NET编译器平台 展示了如何使用新的Visual Studio工具和用于ASP.NET Core 1.0、ASP.NET MVC、Web API、WPF和Universal Windows Platform的模板 介绍允许应用程序在Windows、Linux和OS X上运行的.NET Core框架,还囊括了任务和并行编程,访问文件系统,以及网络堆栈 演示了如何使用ASP.NET MVC 6和Web API创建Web应用程序,以及利用SignalR和WebHooks的推送通知 介绍专业开发功能,例如单元测试,通过MVVM模式在WPF和Universal Windows Platform之间共享代码
对于开发人员,把C#语言和.NET描述为重要的新技术一点都不夸张。.NET提供了一种环境。在这种环境中,可以开发在Windows上运行的几乎所有应用程序。在Windows上运行的是.NET Framework以前的版本,新版本.NET Core 1.0不仅在Windows上运行,还在Linux和Mac系统上运行。C#是专门用于.NET的编程语言。
Christian Nagel是微软开发技术代言人(Microsoft Regional Director)、Visual Studio和开发技术方向的微软MVP、软件架构师、博学开发人员(2000年就开始用.NET技术建立解决方案) 。他编著过多本.NET图书,经常在TechEd和TechDays等国际会议上发言,并支持.NET用户组。Christian是微软认证培训师(MCT),也是Universal Windows apps和ASP.NET方向的微软认证开发专家(MCPD)。
第Ⅰ部分 C# 语 言
第1章 .NET应用程序体系结构 2
1.1 选择技术 2
1.2 回顾.NET历史 3
1.2.1 C# 1.0 —— 一种新语言 3
1.2.2 带有泛型的C# 2和.NET 2 5
1.2.3 .NET 3.0—— Windows
Presentation Foundation 5
1.2.4 C# 3和.NET 3.5—— LINQ 5
1.2.5 C# 4和.NET 4.0—— dynamic
和TPL 6
1.2.6 C# 5和异步编程 6
1.2.7 C# 6和.NET Core 7
1.2.8 选择技术,继续前进 8
1.3 .NET 2015 8
1.3.1 .NET Framework 4.6 9
1.3.2 .NET Core 1.0 10
1.3.3 程序集 11
1.3.4 NuGet 包 12
1.3.5 公共语言运行库 13
1.3.6 .NET Native 14
1.3.7 Windows 运行库 14
1.4 Hello, World 15
1.5 用.NET 4.6编译 16
1.6 用.NET Core CLI编译 17
1.6.1 设置环境 18
1.6.2 构建应用程序 18
1.6.3 打包和应用程序 21
1.7 应用程序类型和技术 22
1.7.1 数据访问 22
1.7.2 Windows桌面应用程序 23
1.7.3 UWP 24
1.7.4 SOAP服务和WCF 24
1.7.5 Web服务和ASP.NET Web
API 24
1.7.6 WebHooks和SignalR 25
1.7.7 Windows服务 25
1.7.8 Web应用程序 25
1.7.9 Microsoft Azure 26
1.8 开发工具 27
1.8.1 Visual Studio Community 27
1.8.2 Visual Studio Professional with
MSDN 27
1.8.3 Visual Studio Enterprise with
MSDN 27
1.8.4 Visual Studio Code 28
1.9 小结 28
第2章 核心C# 29
2.1 C#基础 30
2.2 用Visual Studio创建Hello,
World! 30
2.2.1 创建解决方案 30
2.2.2 创建新项目 31
2.2.3 编译和运行程序 33
2.2.4 代码的详细介绍 35
2.3 变量 36
2.3.1 初始化变量 37
2.3.2 类型推断 38
2.3.3 变量的作用域 39
2.3.4 常量 41
2.4 预定义数据类型 41
2.4.1 值类型和引用类型 42
2.4.2 .NET类型 43
2.4.3 预定义的值类型 43
2.4.4 预定义的引用类型 46
2.5 程序流控制 48
2.5.1 条件语句 48
2.5.2 循环 51
2.5.3 跳转语句 55
2.6 枚举 55
2.7 名称空间 57
2.7.1 using语句 58
2.7.2 名称空间的别名 59
2.8 Main()方法 60
2.9 使用注释 61
2.9.1 源文件中的内部注释 61
2.9.2 XML文档 62
2.10 C#预处理器指令 63
2.10.1 #define和#undef 63
2.10.2 #if、#elif、#else和#endif 64
2.10.3 #warning和 # error 65
2.10.4 #region和#endregion 65
2.10.5 #line 65
2.10.6 #pragma 65
2.11 C#编程准则 66
2.11.1 关于标识符的规则 66
2.11.2 用法约定 67
2.12 小结 70
第3章 对象和类型 71
3.1 创建及使用类 72
3.2 类和结构 72
3.3 类 73
3.3.1 字段 73
3.3.2 属性 74
3.3.3 方法 76
3.3.4 构造函数 81
3.3.5 只读成员 85
3.3.6 只读字段 85
3.4 匿名类型 88
3.5 结构 89
3.5.1 结构是值类型 90
3.5.2 结构和继承 91
3.5.3 结构的构造函数 91
3.6 按值和按引用传递参数 91
3.6.1 ref参数 92
3.6.2 out参数 93
3.7 可空类型 94
3.8 枚举 95
3.9 部分类 97
3.10 扩展方法 99
3.11 Object类 100
3.12 小结 101
第4章 继承 102
4.1 继承 102
4.2 继承的类型 102
4.2.1 多重继承 103
4.2.2 结构和类 103
4.3 实现继承 103
4.3.1 虚方法 104
4.3.2 多态性 106
4.3.3 隐藏方法 107
4.3.4 调用方法的基类版本 108
4.3.5 抽象类和抽象方法 109
4.3.6 密封类和密封方法 110
4.3.7 派生类的构造函数 110
4.4 修饰符 112
4.4.1 访问修饰符 113
4.4.2 其他修饰符 113
4.5 接口 114
4.5.1 定义和实现接口 115
4.5.2 派生的接口 118
4.6 is和as运算符 120
4.7 小结 121
第5章 托管和非托管的资源 122
5.1 资源 122
5.2 后台内存管理 123
5.2.1 值数据类型 123
5.2.2 引用数据类型 125
5.2.3 垃圾回收 127
5.3 强引用和弱引用 129
5.4 处理非托管的资源 130
5.4.1 析构函数或终结器 130
5.4.2 IDisposable接口 131
5.4.3 using语句 132
5.4.4 实现IDisposable接口和
析构函数 133
5.4.5 IDisposable和终结器的
规则 134
5.5 不安全的代码 135
5.5.1 用指针直接访问内存 135
5.5.2 指针示例:
PointerPlayground 143
5.5.3 使用指针优化性能 147
5.6 平台调用 150
5.7 小结 154
第6章 泛型 155
6.1 泛型概述 155
6.1.1 性能 156
6.1.2 类型安全 157
6.1.3 二进制代码的重用 157
6.1.4 代码的扩展 158
6.1.5 命名约定 158
6.2 创建泛型类 158
6.3 泛型类的功能 162
6.3.1 默认值 163
6.3.2 约束 163
6.3.3 继承 166
6.3.4 静态成员 167
6.4 泛型接口 167
6.4.1 协变和抗变 168
6.4.2 泛型接口的协变 169
6.4.3 泛型接口的抗变 170
6.5 泛型结构 171
6.6 泛型方法 173
6.6.1 泛型方法示例 174
6.6.2 带约束的泛型方法 175
6.6.3 带委托的泛型方法 176
6.6.4 泛型方法规范 176
6.7 小结 178
第7章 数组和元组 179
7.1 同一类型和不同类型的多个
对象 179
7.2 简单数组 180
7.2.1 数组的声明 180
7.2.2 数组的初始化 180
7.2.3 访问数组元素 181
7.2.4 使用引用类型 182
7.3 多维数组 183
7.4 锯齿数组 184
7.5 Array类 185
7.5.1 创建数组 185
7.5.2 复制数组 186
7.5.3 排序 187
7.6 数组作为参数 190
7.6.1 数组协变 190
7.6.2 ArraySegment 191
7.7 枚举 191
7.7.1 IEnumerator接口 192
7.7.2 foreach语句 192
7.7.3 yield语句 193
7.8 元组 197
7.9 结构比较 198
7.10 小结 201
第8章 运算符和类型强制转换 202
8.1 运算符和类型转换 202
8.2 运算符 203
8.2.1 运算符的简化操作 204
8.2.2 运算符的优先级和关联性 212
8.3 类型的安全性 213
8.3.1 类型转换 213
8.3.2 装箱和拆箱 217
8.4 比较对象的相等性 218
8.4.1 比较引用类型的相等性 218
8.4.2 比较值类型的相等性 219
8.5 运算符重载 219
8.5.1 运算符的工作方式 220
8.5.2 运算符重载的示例:Vector
结构 221
8.5.3 比较运算符的重载 225
8.5.4 可以重载的运算符 227
8.6 实现自定义的索引运算符 228
8.7 实现用户定义的类型强制
转换 230
8.7.1 实现用户定义的类型强制
转换 231
8.7.2 多重类型强制转换 237
8.8 小结 240
第9章 委托、lambda表达式和
事件 241
9.1 引用方法 241
9.2 委托 242
9.2.1 声明委托 242
9.2.2 使用委托 243
9.2.3 简单的委托示例 246
9.2.4 Action和Func
委托 248
9.2.5 BubbleSorter示例 248
9.2.6 多播委托 251
9.2.7 匿名方法 254
9.3 lambda表达式 255
9.3.1 参数 256
9.3.2 多行代码 256
9.3.3 闭包 257
9.4 事件 258
9.4.1 事件程序 258
9.4.2 事件侦听器 260
9.4.3 弱事件 261
9.5 小结 263
第10章 字符串和正则表达式 264
10.1 System.String类 265
10.1.1 构建字符串 266
10.1.2 StringBuilder成员 269
10.2 字符串格式 270
10.2.1 字符串插值 270
10.2.2 日期时间和数字的格式 272
10.2.3 自定义字符串格式 274
10.3 正则表达式 275
10.3.1 正则表达式概述 275
10.3.2 RegularExpressionsPlayaround
示例 276
10.3.3 显示结果 279
10.3.4 匹配、组和捕获 280
10.4 小结 283
第11章 集合 284
11.1 概述 284
11.2 集合接口和类型 285
11.3 列表 285
11.3.1 创建列表 287
11.3.2 只读集合 294
11.4 队列 294
11.5 栈 298
11.6 链表 300
11.7 有序列表 305
11.8 字典 306
11.8.1 字典初始化器 307
11.8.2 键的类型 307
11.8.3 字典示例 308
11.8.4 Lookup类 312
11.8.5 有序字典 313
11.9 集 313
11.10 性能 315
11.11 小结 316
第12章 特殊的集合 317
12.1 概述 317
12.2 处理位 317
12.2.1 BitArray类 318
12.2.2 BitVector32结构 320
12.3 可观察的集合 323
12.4 不变的集合 324
12.4.1 使用构建器和不变的
集合 327
12.4.2 不变集合类型和接口 327
12.4.3 使用LINQ和不变的
数组 328
12.5 并发集合 328
12.5.1 创建管道 329
12.5.2 使用BlockingCollection 332
12.5.3 使用Concurrent-
Dictionary 333
12.5.4 完成管道 334
12.6 小结 335
第13章 LINQ 337
13.1 LINQ概述 337
13.1.1 列表和实体 338
13.1.2 LINQ查询 341
13.1.3 扩展方法 342
13.1.4 推迟查询的执行 343
13.2 标准的查询操作符 345
13.2.1 筛选 347
13.2.2 用索引筛选 347
13.2.3 类型筛选 348
13.2.4 复合的from子句 348
13.2.5 排序 349
13.2.6 分组 350
13.2.7 LINQ 查询中的变量 351
13.2.8 对嵌套的对象分组 352
13.2.9 内连接 353
13.2.10 左外连接 355
13.2.11 组连接 355
13.2.12 集合操作 358
13.2.13 合并 360
13.2.14 分区 360
13.2.15 聚合操作符 362
13.2.16 转换操作符 363
13.2.17 生成操作符 365
13.3 并行LINQ 365
13.3.1 并行查询 365
13.3.2 分区器 366
13.3.3 取消 367
13.4 表达式树 367
13.5 LINQ提供程序 370
13.6 小结 371
第14章 错误和异常 372
14.1 简介 372
14.2 异常类 373
14.3 捕获异常 374
14.3.1 实现多个catch块 377
14.3.2 在其他代码中捕获异常 380
14.3.3 System.Exception属性 380
14.3.4 异常过滤器 381
14.3.5 重新抛出异常 382
14.3.6 没有处理异常时发生的
情况 386
14.4 用户定义的异常类 386
14.4.1 捕获用户定义的异常 387
14.4.2 抛出用户定义的异常 389
14.4.3 定义用户定义的异常类 392
14.5 调用者信息 394
14.6 小结 396
第15章 异步编程 397
15.1 异步
1 章第1 章 .NET 应用程序体系结构3提供这方面的帮助。其中包含用于创建Windows、Web 应用程序和服务的不同技术的信息,指导选择什么技术进行数据库访问,凸显了.NET 和.NET Core 之间的差异。1.2 回顾.NET 历史要更好地理解.NET 和C#的可用功能,好先了解它的历史。表1-1 显示了.NET 的版本、对应的公共语言运行库(Common Language Runtime,CLR)的版本、C#的版本和Visual Studio 的版本,并指出相应版本的年份。除了知道使用什么技术之外,好也知道不推荐使用什么技术,因为这些技术会被代替。表1-1.NET CLR C# Visual Studio1.0 1.0 1.0 20021.1 1.1 1.2 20032.0 2.0 2.0 20053.0 2.0 2.0 2005 扩展版3.5 2.0 3.0 20084.0 4.0 4.0 20104.5 4.0 5.0 20124.5.1 4.0 5.0 20134.6 4.0 6 2015.NET Core 1.0 CoreCLR 6 2015 扩展版下面各小节详细介绍表1-1,以及C#和.NET 的发展。1.2.1 C# 1.0 —— 一种新语言C# 1.0 是一种全新的编程语言,用于.NET Framework。开发它时,.NET Framework 由大约3000个类和CLR 组成。(创建Java 的Sun 公司申请)法庭判决不允许微软公司更改Java 代码后,Anders Hejlsberg 设计了C#。Hejlsberg 为微软公司工作之前,在Borland 公司设计了Delphi 编程语言(一种Object Pascal 语言)。Hejlsberg 在微软公司负责J (Java 编程语言的微软版本)。鉴于Hejlsberg 的背景,C#编程语言主要受到C 、Java 和Pascal 的影响。因为C#的创建晚于Java 和C ,所以微软公司分析了其他语言中典型的编程错误,完成了一些不同的工作来避免这些错误。这些不同的工作包括:● 在 if 语句中,布尔(Boolean)表达式是必须的(C 也允许在这里使用整数值)。● 允许使用struct 和class 关键字创建值类型和引用类型(Java 只允许创建自定义引用类型;在C 中,struct 和class 之间的区别只是访问修饰符的默认值不同)。● 允许使用虚拟方法和非虚拟方法 (这类似于C ,Java 总是创建虚拟方法)。当然,阅读本书,你会看到更多的变化。第Ⅰ部分 C# 语言4现在,C#是一种纯粹的面向对象编程语言,具备继承、封装和多态性等特性。C#也提供了基于组件的编程改进,如委托和事件。在.NET 和CLR 推出之前,每种编程语言都有自己的运行库。在C 中,C 运行库与每个C 程序链接起来。Visual Basic 6 有自己的运行库VBRun。Java 的运行库是Java 虚拟机(Java VirtualMachine,JVC)——可以与CLR 相媲美。CLR 是每种.NET 编程语言都使用的运行库。推出CLR 时,微软公司提供了JScript .NET、Visual Basic .NET、 Managed C 和C#。JScript .NET 是微软公司的JavaScript 编译器,与CLR 和.NET 类一起使用。Visual Basic .NET 是提供.NET 支持的Visual Basic。现在再次简称为Visual Basic。Managed C 是混合了本地C 代码与Managed .NET 代码的语言。今天与.NET 一起使用的新C 语言是C / CLR。.NET 编程语言的编译器生成中间语言(Intermediate Language,IL)代码。IL 代码看起来像面向对象的机器码,使用工具ildasm.exe 可以打开包含.NET 代码的DLL 或EXE 文件来检查IL 代码。CLR 包含一个即时(Just-In-Time,JIT)编译器,当程序开始运行时,JIT 编译器会从IL 代码生成本地代码。CLR 的其他部分是垃圾回收器(GC)、调试器扩展和线程实用工具。垃圾回收器负责清理不再引用的托管内存,这个安全机制使用代码访问安全性来验证允许代码做什么;调试器扩展允许在不同的编程语言之间启动调试会话 (例如,在Visual Basic 中启动调试会话,在C#库内继续调试);线程实用工具负责在底层平台上创建线程。.NET Framework 的第1 版已经很大了。类在名称空间内组织,以便于导航可用的3000 个类。名称空间用来组织类,允许在不同的名称空间中有相同的类名,以解决冲突。.NET Framework 的第1 版允许使用Windows Forms(名称空间System.Windows.Forms)创建Windows 桌面应用程序,使用ASP.NET Web Forms (System.Web )创建Web 应用程序,使用ASP.NET Web Services 与应用程序和Web 服务通信,使用.NET Remoting 在.NET 应用程序之间更迅速地通信,使用Enterprise Services创建运行在应用程序服务器上的COM 组件。ASP.NET Web Forms 是创建Web 应用程序的技术,其目标是开发人员不需要了解HTML 和JavaScript。服务器端控件会创建HTML 和JavaScript,这些控件的工作方式类似于Windows Forms本身。C# 1.2 和.NET 1.1 主要是错误修复版本,改进较小。注意:IL 代码也称为托管代码。注意:继承在第4 章中讨论,委托和事件在第9 章中讨论。注意:.NET 的每个新版本都有Professional C#图书的新版本。对于.NET 1.0,这本书已经是第2 版了,因为第1 版是以.NET 1.0 的Beta 2 为基础出版的。目前,本书是第10 版。第1 章 .NET 应用程序体系结构51.2.2 带有泛型的C# 2 和.NET 2C# 2 和.NET 2 是一个巨大的更新。在这个版本中,改变了C#编程语言,建立了IL 代码,所以需要新的CLR 来支持IL 代码的增加。一个大的变化是泛型。泛型允许创建类型,而不需要知道使用什么内部类型。所使用的内部类型在实例化(即创建实例)时定义。C#编程语言中的这个改进也导致了Framework 中多了许多新类型,例如System.Collections.Generic名称空间中新的泛型集合类。有了这个类,1.0 版本定义的旧集合类就很少用在新应用程序中了。当然,旧类现在仍然在工作,甚至在新的.NET Core 版本中也是如此。1.2.3 .NET 3.0 —— Windows Presentation Foundation.NET 3.0 时,不需要新版本的C#。3.0 版本只提供了新的库,但它了大量新的类型和名称空间。Windows Presentation Foundation(WPF)可能是新框架较大的一部分,用于创建Windows桌面应用程序。Windows Forms 包括本地Windows 控件,且基于像素;而WPF 基于DirectX,独立绘制每个控件。WPF 中的矢量图形允许无缝地调整任何窗体的大小。WPF 中的模板还允许自定义外观。例如,用于苏黎世机场的应用程序可以包含看起来像一架飞机的按钮。因此,应用程序的外观可以与之前开发的传统Windows 应用程序非常不同。System.Windows 名称空间下的所有内容都属于WPF,但System.Windows.Forms 除外。有了WPF,用户界面可以使用XML 语法设计XAML(XML for Applications Markup Language)。.NET 3.0 推出之前,ASP.NET Web Services 和.NET Remoting 用于应用程序之间的通信。MessageQueuing 是用于通信的另一个选择。各种技术有不同的优点和缺点,它们都用不同的API 进行编程。典型的企业应用程序必须使用一个以上的通信API,因此必须学习其中的几项技术。WCF(WindowsCommunication Foundation) 解决了这个问题。WCF 把其他API 的所有选项结合到一个API 中。然而,为了支持WCF 提供的所有功能,需要配置WCF。.NET 3.0 版本的第三大部分是Windows WF(Workflow Foundation)和名称空间System.Workflow。微软公司不是为几个不同的应用程序创建自定义的工作流引擎(微软公司本身为不同的产品创建了几个工作流引擎),而是把工作流引擎用作.NET 的一部分。有了.NET 3.0,Framework 的类从.NET 2.0 的8 000 个增加到约12 000 个。1.2.4 C# 3 和.NET 3.5——LINQ.NET 3.5 和新版本C# 3 一起。主要改进是使用C#定义的查询语法,它允许使用相同的语法来过滤和排序对象列表、XML 文件和数据库。语言增强不需要对IL 代码进行任何改变,因为这里使用的C#特性只是语法糖。所有的增强也可以用旧的语法实现,只是需要编写更多的代码。C#语言很容易进行这些查询。有了LINQ 和lambda 表达式,就可以使用相同的查询语法来访问对象集注意:本书一直在使用泛型,详见第6 章。第11 章介绍了泛型集合类。注意:在本书中,WPF 参见第29、30、31、34、35 和36 章。WCF 详见第44 章。第Ⅰ部分 C# 语言6合、数据库和XML 文件。为了访问数据库并创建LINQ 查询,LINQ to SQL 为.NET 3.5 的一部分。在.NET 3.5 的及时个更新中,了Entity Framework 的及时个版本。LINQ to SQL 和Entity Framework 都提供了从层次结构到数据库关系的映射和LINQ 提供程序。Entity Framework 更强大,但LINQ to SQL 更简单。随着时间的推移,LINQ to SQL 的特性在Entity Framework 中实现了,并且Entity Framework 会一直保留这些特性(现在它看起来与及时个版本非常不同)。另一种引入为.NET 3.5 一部分的技术是System.AddIn 名称空间,它提供了插件模型。这个模型提供了甚至在过程外部运行插件的强大功能,但它使用起来也很复杂。1.2.5 C# 4 和.NET 4.0—— dynamic 和TPLC# 4 的主题是动态集成脚本语言,使其更容易使用COM 集成。C#语法扩展为使用dynamic 关键字、命名参数和可选参数,以及用泛型增强的协变和逆变。其他改进在.NET Framework 中进行。有了多核CPU,并行编程就变得越来越重要。任务并行库(Task Parallel Library,TPL)使用Task 类和Parallel 类抽象出线程,更容易创建并行运行的代码。因为用.NET 3.0 创建的工作流引擎没有履行自己的诺言,所以全新的Windows WorkflowFoundation 成为.NET 4.0 的一部分。为了避免与旧工作流引擎冲突,新的工作流引擎是在System.Activity 名称空间中定义的。C# 4 的增强还需要一个新版本的运行库。运行库从版本2 跳到版本4。Visual Studio 2010 时,附带了一项创建Web 应用程序的新技术:ASP.NET MVC 2.0。与ASP.NET Web Forms 不同,这项技术需要编写HTML 和JavaScript,并使用C#和.NET 的服务器端功能。ASP.NET MVC 是定期更新的。1.2.6 C# 5 和异步编程C# 5 只有两个新的关键字:async 和await。然而,它大大简化了异步方法的编程。在Windows 8中,触摸变得更加重要,不阻塞UI 线程也变得更加重要。用户使用鼠标,习惯于花些时间滚动屏幕。然而,在触摸界面上使用手势时,反应不及时很不好。Windows 8 还为Windows Store 应用程序(也称为Modern 应用程序、Metro 应用程序、通用Windows 应用程序,最近称为Windows 应用程序)引入了一个新的编程接口:Windows 运行库。这是一个本地运行库,看起来像是使用语言投射的.NET。许多WPF 控件都为新的运行库重写了,.NETFramework 的一个子集可以使用这样的应用程序。注意:LINQ 详见第13 章,Entity Framework 的近期版本与.NET 3.5 版本有很大差别,参见第38 章。注意:C# 4 的dynamic 关键字参见第16 章。任务并行库参见第21 章。ASP.NET 5和ASP.NET MVC 6 参见第40 和41 章。第1 章 .NET 应用程序体系结构7System.AddIn 框架过于复杂、缓慢,所以用.NET 4.5 创建了一个新的合成框架:ManagedExtensibility Framework 和名称空间System.Composition。独立于平台的通信的新版本是由ASP.NET Web API 提供的。WCF 提供有状态和无状态的服务,以及许多不同的网络协议,而ASP.NET Web API 则简单得多,它是基于Representational StateTransfer(REST)软件架构风格的。1.2.7 C# 6 和.NET CoreC# 6 没有由泛型、LINQ 和异步带来的巨大改进,但有许多小而实用的语言增强,可以在几个地方减少代码的长度。很多改进都通过新的编译器引擎Roslyn 来实现。完整的.NET Framework 并不是近年来使用的.NET Framework。有些场景需要较小的框架。2007 年,了Microsoft Silverlight 的及时个版本(代码名为WPF/E,即WPF Everywhere)。Silverlight是一个Web 浏览器插件,支持动态内容。Silverlight 的及时个版本只支持通过JavaScript 编程。第2个版本包含.NET Framework 的子集。当然,不需要服务器端库,因为Silverlight 总是在客户端运行,但附带Silverlight 的框架Framework 也删除了核心特性中的类和方法,使其更简洁,便于移植到其他平台。用于桌面的Silverlight 近期版本(第5 版)在2011 年12 月。Silverlight 也用于WindowsPhone 的编程。Silverlight 8.1 进入Windows Phone 8.1,但这个版本的Silverlight 也不同于桌面版本。在Windows 桌面上,有如此巨大的.NET 框架,需要更快的开发节奏,也需要较大的改进。在DevOps 中,开发人员和操作员一起工作,甚至是同一个人不断地给用户提供应用程序和新特性,需要使新特性快速可用。由于框架巨大,且有许多依赖关系,创建新的特性或修复缺陷是一项不容易完成的任务。有了几个较小的.NET Framework(如Silverlight、用于Windows Phone 的Silverlight),在.NET 的桌面版本和较小版本之间共享代码就很重要。在不同.NET 版本之间共享代码的一项技术是可移植库。随着时间的推移,有了许多不同的.NET Framework 和版本,可移植库的管理已成为一场噩梦。为了解决所有这些问题,需要.NET 的新版本(是的,的确需要解决这些问题)。Framework 的新版本命名为.NET Core。.NET Core 较小,带有模块化的NuGet 包以及分布给每个应用程序的运行库是开源的,不仅可用于Windows 的桌面版,也可用于许多不同的Windows 设备,以及Linux 和OS X。为了创建Web 应用程序,重写了ASP.NET Core 1.0。这个版本不向后兼容老版本,需要对现有的ASP.NET MVC(和ASP.NET MVC 6)代码进行一些修改。然而,与旧版本相比,它也有
书不错,送货很快
还可以,还可以
第一次当当购物,体验非常糟糕,打了无数的电话催物流,送客户的书,结果客户走了,书还在??
好评!书正是我想要的。
满100减50活动,买到了很多好书,又实惠。
超级厚的一本书!应该会有帮助
做活动买的,很便宜,是正版书,就是包装很差,书角都磕破了
ok ok
还可以,不错
书很好,是正版,学习用
整体感觉不错
一部分纸质是黄色的,一小部分纸是白色的
图书纸张质量,印刷清晰,很喜欢它的思路
希望包装多点保护的 书是真厚实啊 惊吓。。
这次换的很满意,这才是敢做敢当当!
内容不错,推荐阅读,就是价格稍微有点高。
不错,书是正版的,书很厚,很重~
书不错希望出更多好看的不错不错不错
跟书没关系,一星是给物流的,下次绝对不会在当当买书了,真考验耐心,五天了!!!物流信息显示三天时间就到了宁夏了,结果没动静,我打电话过去说运到兰州了,然后到现在为止,一点动静都没有,邮政都比你快的多啊,真是够了。明天再不到我就直接退款了,真是浪费时间。
还可以吧。
书很不错值得初学者自学
经典永远在路上!!
不错的参考书籍
还行,没坏,包装太简陋,就一个纸箱子,送到之后箱子都摔开了,要么就换个好的快递,要么就包装用点心,得亏没下雨,不然书全泡了!
书籍还不错的
我就呵呵了,一两百的书,当laji运呢!包装烂的不像样子,辛好老天没下雨不然书就没了!书有些地方都皱了,不知道是快递的原因还是商家的原因!唉,糟心啊。勉强能看,算了,就这样吧,再也不见!!!
买来自学的,很厚的一本书
在看,不错,
作为工具书使用,还是很好的!
源码无法下载,书背后的扫码下载源码,必须要老师身份,比较坑爹
当当果然一如既往的快,纸的质量也很好啊,满分
书的质量什么的都很好,相信对提高C#编程大有裨益。主要的问题是此书太厚太沉了,我的照片是在称上拍的,足足2218克(2.2公斤),书的装帧是怎么安排的?至少可以拆分成2~3本!携带阅读非常不方便。这种设计真是让人无语。因此,只能给4星。
代朋友买的,经典名著,连续畅销十九年,累计销售超20万册,wrox精品红皮书,引领无数程序员进入程序开发殿堂2009年度/2011年度全行业优秀畅销书,深受广大读者喜爱2008年度优秀技术图书!
挺厚的,真尼玛厚,我还买了第九版,两本加起来能砸死一个人