博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET 4.5 基类库中的新增功能
阅读量:5213 次
发布时间:2019-06-14

本文共 2213 字,大约阅读时间需要 7 分钟。

 

1. 简化的异步编程

C#和VB都支持了新的async & await语法以简化异步编程,.Net Framework中也相应增加了相关的函数以辅助。一个比较醒目的变化就是在IO操作中多了许多XXXAsync的函数,另外,线程操作的Task类中也新增了不少静态函数。

 

2. 只读集合接口

长期以来,BCL中提供的只读集合只有IEnumerable<T>它主要存在如下问题:

  • 每次访问都需要迭代,如果多次访问则导致性能较差。
  • 不支持统计元素个数
  • 不支持随机访问或查询访问

由于C#不像C++那样能返回const只读对象,如果直接返回List或Dictionary引用的话又有集合被调用方修改的风险,有的时候,为了防止集合被修改,我们甚至通过ToArray这种比较低效的方法返回一个副本。

.Net 4.5中增加了IReadOnlyList<T>IReadOnlyDictionary<TKey, TValue>两个只读集合接口(它们有公共的父接口IReadOnlyCollection),它们是支持协变的,这样我们返回集合的时候就可以直接返回只读集合了。

 

3. zip存档支持

.Net 4.5中增加了类实现对Zip文件的管理,由于考虑到了Metro程序不支持文件系统,它的功能被拆分到了两个Dll。

  • System.IO.Compression.dll 此程序集包含通用 .zip 功能, 它不支持文件路径。 此程序集中的主类是 ZipArchive。
  • System.IO.Compression.FileSystem.dl 此程序集提供 ZipFile 静态类以定义扩展方法和静态帮助程序。

PS:个人感觉这个设计比较蛋疼,用个Zip还需要引用两个Dll,完全可以合并成一个或全部塞到mscrolib里面去,对于Metro程序直接把不支持的给裁剪了即可。另外,这个库不支持带密码的zip文件,不知道设计者是怎么想的。

 

4. HttpClient

.Net 4.5中新增了一个类专门用于Http操作,十分小巧好用,我以前写过一篇文章介绍他-- ,这里就不多说了。

 

5. WebSocket

.Net 4.5中,在System.Web.WebSockets和System.Net.WebSocket名字空间实现了对WebSocket的支持,其中前者主要用于Asp.net框架。通过它可以快速建立自己的webSocket服务,我在文章中也介绍过。不过它不支持win7,只能在win8上工作,这个限制使得它的工作范围变得有限了不少。

 

6. WeakReference<T>

新提供的泛型WeakReference<T>解决了以前的WeakReference存在的两个问题:1. 需要类型转换,2. 不可靠的IsAlive属性(WeakReference<T>就把它给直接去掉了)。有了WeakReference<T>后,老版本的WeakReference该下岗了。

 

7. ArraySegment<T>

这个类本身在.Net 2.0中就已经有了,主要用于提供一个数组的子集,而无需复制副本。但它之前没有什么接口方法,导致只能遍历,限制太大。现在实现了IList接口,用起来方便多了。

 

8. Comparer<T>.Create

到了.Net 4.5,我们终于可以通过一个lambda表达式构造一个IComparer<T>对象了,一直以为这个应该是在.Net 2.0时代就应该提供的功能。

 

9. SemaphoreSlim.WaitAsync

这个是系统内置的唯一一个异步锁,如果觉得不够用,请参看我以前的文章--。

 

10. StreamReader、StreamWriter等不释放基础流的选项

BinaryReader、BinaryWriter、StreamReader、StreamWriter等流读写类的构造函数中增加了leaveOpen参数,以控制它们放弃对基础流的托管。也就是说,在StreamReader关闭的时候,可以选择不关闭其基础流。

 

11. Regex.Timeout

正则表达式终于支持超时了,虽然用到的地方感觉不是很多,但还是比较有用的。

 

12. CancellationTokenSource支持超时自动取消

不多介绍了,请参考我以前的文章--。

 

其他两个非BCL中的类库

1. TPL Dataflow (TDF)

是微软面向高并发应用而推出的新程序库,很好很强大,不知道为什么微软没有把它合并到BCL中,而是单独做一个库发行,可以通过NUGET或在TDF的官网下载。这个库接口不多,但非常好用,有空的话我专门写几篇文章来描述一下他,不过目前对它的资料不是很多,有的细节还是了解的不清楚。

 

2. Roslyn

编译器即服务(Compiler as a Service)是C# 5.0的核心功能之一,我以前在文章介绍过它的部分功能。不过的开发进度好像赶不上VisualStudio的发布,目前还是CTP版本(Anders大牛忙着搞TypeScript去了? O(∩_∩)O~),不过实现的功能已经比较全了,想尝鲜的朋友可以在微软的网站或NUGET上下载。

 

参考文章:

转载于:https://www.cnblogs.com/TianFang/archive/2012/11/14/2770546.html

你可能感兴趣的文章
win8&server2012离线安装net3.5的方法
查看>>
12306票池架构探讨(三)
查看>>
1162字符串逆序
查看>>
【转】Ubuntu环境搭建svn服务器
查看>>
svn客户端清空账号信息的两种方法
查看>>
springboot添加servlet的两种方法
查看>>
java的Array和List相互转换
查看>>
win7安装IIS
查看>>
idea设置内存大小
查看>>
springboot热部署JRebel插件
查看>>
java获取当前项目路径System.getProperty("user.dir")
查看>>
idea关闭sonarLint自动扫描
查看>>
java的byte[]与String相互转换
查看>>
idea打开Run Dashboard
查看>>
java注解简单使用
查看>>
【转】Axure RP9.0.0.3661Team Edition激活码
查看>>
springboot集成mybatisplus小例子
查看>>
jqGrid设置单选
查看>>
mysql查看和修改最大连接数
查看>>
【转】查看电脑显卡型号及显卡性能
查看>>