1. 新的CLR4
2. 新加的类
a. BigInteger:System.Numerics.BigInteger.
一个可以代表任意长度整数的类型. 尝试运行这段代码,看两者的差别:
BigInteger b = BigInteger.Pow(2, 64);
Console.WriteLine(b.ToString("N"));
Double d = Math.Pow(2, 64);
Console.WriteLine(d.ToString("N"));
参考:http://blogs.microsoft.co.il/blogs/pavely/archive/2009/05/26/biginteger-in-net-4-0.aspx
b. Complex, 参看:
c. Tuple, 用来存放不同类型对象的集合,并且,提取对象的时候不需要类型转换,和数组做一个对比.
用数组存储对象:
object[] o = new object[2]{"Hello",4};
Console.WriteLine((string)o[0]+" "+(int)o[1]);
用Tuple存储对象:
Tuple<string, int> t = new Tuple<string, int>("Hello", 4);
Console.WriteLine(t.Item1+" "+t.Item2);
Tuple 还有其他有趣的功能,请参看
d. SortedSet, 使用平衡二叉数来保持节点有序,SortedSet<T>实现(implement)ISet<T>接口.
加入SortedSet<T>里的类型要实现
IComparable 接口. 更多请参考:
e. MemoryMappedFiles:System.IO.MemoryMappedFiles.
把硬盘的文件映射到内存里,根据Salvador Patuel 的说法,这个类型能带来两个好处
-
避免了频繁了IO操作,方便了大文件的处理,尤其在现在这个内存越来越大的时代.
-
方便多核处理器共享数据.
关于第二点,为多核处理器带来的好处,看下图:
具体使用请参看:Salvador Patuel 的一篇博文:
f. Unified Cancellation Model, 请参看 Parallel Programming with.NET 的一篇文章:
3. 根据契约设计(Design By Contract)
为什么要根据契约设计?
在运行例子之前,到下面地址下载Code Contract 插件(现在.Net 4.0&VS2010 还在Beta 阶段)
一个比较不错的例子:
原文里Contract.Result()>0 应该改为Contract.Result<int>()>0, 完整的测试代码为:
using
System.Diagnostics.Contracts;
using
System.Diagnostics;
class
Program {
static void Main(string[] args) {
SimpleCalculate sc = new SimpleCalculate(4,8);
Console.WriteLine(sc.Divide());
}
}
class SimpleCalculate {
private int num1;
private int num2;
public SimpleCalculate(int numberone, int numbertwo) {
num1 = numberone;
num2 = numbertwo;
}
[ContractInvariantMethod]
protected void ObjectInvariant() {
Contract.Invariant(this.num2>0);
}
public int Divide() {
Contract.Ensures(Contract.Result<int>() > 0);
if (num2 > 0)
return num1 / num2;
return num1;
}
}
上文的作者在文章最后提出了一个很有意思的问题,程序中Divide() 方法都还没运行完,Contract 居然就告诉你结果有问题了,相当的有意思。
更多关于Code Contract 的信息,请参考:
4. Type Equivalence
.NET 4.0 使得Managed Code 和COM 的交互更加方便,以往的做法简直让人有晕厥的倾向.更多关于 Type Equivalence. 让权威人士 Misha Shneerson 给我们讲一堂课(PDC 的时候,讲到中途有人离场,她很郁闷)
一个视频Demo - CLR4, Inside Type Equivalence
另外一篇相关文章 PDC Day 1: No-PIA, or Type Equivalence and Type Embedding
本文转自 xhinkerx 51CTO博客,原文链接:http://blog.51cto.com/xhinker/194756,如需转载请自行联系原作者