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

简介:

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<stringint> t = new Tuple<stringint>("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 阶段)
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 的信息,请参考:

 

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,如需转载请自行联系原作者
目录
相关文章
|
2天前
|
云安全 人工智能 自然语言处理
|
9天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
701 56
Meta SAM3开源:让图像分割,听懂你的话
|
7天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
325 116
|
6天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
569 13
|
22天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
AgentEvolver:让智能体系统学会「自我进化」
AgentEvolver 是一个自进化智能体系统,通过自我任务生成、经验导航与反思归因三大机制,推动AI从“被动执行”迈向“主动学习”。它显著提升强化学习效率,在更少参数下实现更强性能,助力智能体持续自我迭代。开源地址:https://github.com/modelscope/AgentEvolver
460 34
|
5天前
|
弹性计算 人工智能 Cloud Native
阿里云无门槛和有门槛优惠券解析:学生券,满减券,补贴券等优惠券领取与使用介绍
为了回馈用户与助力更多用户节省上云成本,阿里云会经常推出各种优惠券相关的活动,包括无门槛优惠券和有门槛优惠券。本文将详细介绍阿里云无门槛优惠券的领取与使用方式,同时也会概述几种常见的有门槛优惠券,帮助用户更好地利用这些优惠,降低云服务的成本。
280 133