.NET 4.0 新增内容总结(一)

1. 新的CLR4
2. 新加的类
3. 根据契约设计(Design By Contract)
4. Type Equivalence

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, 参看:
http://msdn.microsoft.com/en-us/library/bb738466(VS.100).aspx
 
     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 还有其他有趣的功能,请参看
http://msdn.microsoft.com/en-us/magazine/dd942829.aspx
 
     d. SortedSet, 使用平衡二叉数来保持节点有序,SortedSet<T>实现(implement)ISet<T>接口.
加入SortedSet<T>里的类型要实现 IComparable 接口. 更多请参考:
http://msdn.microsoft.com/en-us/library/dd412070(VS.100).aspx
 
     e. MemoryMappedFiles:System.IO.MemoryMappedFiles.
把硬盘的文件映射到内存里,根据Salvador Patuel 的说法,这个类型能带来两个好处
  •      避免了频繁了IO操作,方便了大文件的处理,尤其在现在这个内存越来越大的时代.
  •   方便多核处理器共享数据.
关于第二点,为多核处理器带来的好处,看下图:
 
具体使用请参看:Salvador Patuel 的一篇博文:
http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx
 
    f. Unified Cancellation Model, 请参看 Parallel Programming with.NET 的一篇文章:
http://blogs.msdn.com/pfxteam/archive/2009/05/22/9635790.aspx
 

3. 根据契约设计(Design By Contract)

 
为什么要根据契约设计?
在运行例子之前,到下面地址下载Code Contract 插件(现在.Net 4.0&VS2010 还在Beta 阶段)
http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx#2
一个比较不错的例子:
http://www.codeproject.com/KB/dotnet/CodeContract.aspx
原文里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 的信息,请参考:
http://blogs.msdn.com/somasegar/archive/2009/02/23/devlabs-code-contracts-for-net.aspx

 

4. Type Equivalence

.NET 4.0 使得Managed Code 和COM 的交互更加方便,以往的做法简直让人有晕厥的倾向.更多关于 Type Equivalence. 让权威人士 Misha Shneerson 给我们讲一堂课(PDC 的时候,讲到中途有人离场,她很郁闷) 
http://blogs.msdn.com/mshneer/archive/2008/10/28/advances-in-net-type-system-type-equivalence-demo.aspx
 
一个视频Demo - CLR4, Inside Type Equivalence
http://channel9.msdn.com/shows/Going+Deep/Raja-Krishnaswamy-and-Vance-Morrison-CLR-4-Inside-Type-Equivalence/
 
另外一篇相关文章 PDC Day 1: No-PIA, or Type Equivalence and Type Embedding
http://blogs.microsoft.co.il/blogs/sasha/archive/2008/10/29/pdc-day-1-no-pia-or-type-equivalence-and-type-embedding.aspx

本文出自 “Xhinker” 博客,谢绝转载!

你可能感兴趣的:(.net,职场,4.0,休闲)