C#4.0与Visual Stuidio 2010 的新特性介绍

本文详细介绍了C# 4.0版本的重要更新,包括dynamic关键字、命名参数和可选参数等功能,以及COM互操作性的改进。此外,还概述了Visual Studio 2010的一些关键特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

大家先来回顾C#发展历史从1.0开始到现在的4.0。
C#1.0 使用了大家所熟知的语法实现了方法,以至于很多人认为C#和Java、C 等面向对象语言“非常相像”,这使得从使用其他面向对象语言转到使用C#的过程非常简单。还通过无参数列表的方法声名语法,结合get/set访问器实现了优雅的属性语法;
C#2.0 为开发者带来的最主要的特性就是泛型编程能力,也与Java1.5的泛型如出一辙。另一个突出的特性就是匿名方法,用来取代一些短小的并且仅出现一次的委托,使得语言结构更加紧凑;
C#3.0 加入LINQ查询(语言集成查询),提出了一种通过面向对象语法来实现对非面向对象数据源的查询技术,可查询的数据源从关系型数据库延伸到一般意义上的集合(如数组和列表)以及XML,简直就是神来之笔;
C#4.0 ...... 下面介绍;
[这里面还有一点版本号的小插曲——VS2008所对应的.Net Framework是3.5,C#是3.0,CLR是2.0,及其MS
终于下决心在VS2010中把这三个版本号都统一成了4.0,于是CLR3不知所终……]
下面来介绍C#4.0的新特性
1.   dynamic关键字 !

我们可以看到方法GetSomeList()定义的返回类型是dynamic, 上面例子里实际返回的类型是List。而事 实上这里可以返回任何类型,int,

string, StringBuilder都可以,因为我们定义了它的返回类型是“动态”的。

 

再看myObject, 我们调用了它的方法"NonExistsMethod”,正如其名,这个方法在任何地方都是不存在的。

但是上述程序可以在Visual Studio2010里编译通过,没有任何错误!如果我们把NonExistsMethod替换成实际存在的方法,譬如Sort(),

运行也是没有问题的。也就是说,如果某个变量是dynamic类型的,那么编译器允许你调用任何存在或者不存在的方法。

这些方法会一直到运行时才在被绑 定,如果不存在,当然就会有异常抛出。


看到这里相信大家觉得dynamic和某个东西很像,没错,就是和object很像!一个dynamic类型的引用和object一样,可以指向任 何类型,

GetSomeList()方法就是这样的用法。但是又似乎有点不同,譬如我们可以调用任何方法,极大地增强了动态性。

编译上述例子并在 reflector里查看过后,我们可以发现C#其实在编译上确实把它作为了object, GetSomeList() 会被编译成:

而对dynamic对象的调用会被编译成:

我们可以看到在神秘的dynamic背后,NonExistsMethod被处理成了动态绑定用的字符串。

而一个新的类型 System.Runtime.CompilerServices.CallSite被引入在.Net 4.0里用来支持这样的动态绑定。

 

总结: dynamic

1可以和动态语言互操作,可以同时享受动态语言的灵活和.Net的强大

2可以支持自顶而下的开发方式,从顶层的架构开始搭起会很容易,调用不存在的方法(甚至这个类都根本不存在)编译也没有问题。

 

 

2 .命名参数

命名参数的语法为:

参数名称1:参数值1,参数名称2:参数值2…

例如以下代码:

可以看到由于在调用时使用了命名参数,参数的位置就不在重要了。

 

 

3. 可选参数

方法、构造函数、索引器和委托的定义可以指定其参数为必选的还是可选的,在调用时必须提供必选参数,但是可以省略可选参数。

还可以使用System.Runtime.InteropServices.OptionalAttribute特性类定义可选参数,该类从1.0时代就已经包含在基类库中了。

每一个可选参数的定义都包含默认值(默认值必须是常量),如果在调用时没有指定该参数,则使用默认值。例如以下代码:

在所有必须参数后面定义可选参数,如果在调用时提供了某个可选参数的值,那么必须提供该可选参数之前所有可选参数的值(如果此参数之

前有可选参数),而不允许使用逗号分隔的形式提供参数,即以下调用是错误的:

CreateUser(“admin”,“adminpassword”,,true);

而必须写成:

CreateUser(“admin”,“adminpassword”,20,true);、

或者更好的解决办法是使用命名参数:

CreateUser(“admin”,“adminpassword”,isLocked:true);

 

4 .增强的COM互操作性特性

C# 4.0在COM互操作性支持方面提供了很多改进,使得你现在在.NET代码中可以更容易地调用COM对象了,需要执行的类型转换更少

了,ref关键字不再需要,也不再需要主互操作程序集或PIA,从本质上讲,C# 4.0提供了大量的新特性,特别是在COM互操作方面更是下足

了功夫,在前一篇文章中谈到的动态查询和命名/可选参数的支持,帮助提高了与COM API如Office自动化API互操作的体验。

例如,下面是C# 4.0以前的版本打开一个Word文件的代码:

在最后的open调用中,你可以看到需要传递大量的可选参数以满足函数调用,随着C# 4.0中可选和命名参数的引入,现在做同样的事情,

需要的代码要少得多了。

下面是C# 4.0中用来打开Word文档的代码:

 

VS2010 新特性如下介绍

Visual Stuidio 2010提供了更好的用户体验,令流程更加自然,更加便于理解。

◆明了的UI设计

◆减少复杂度

◆增强的编辑器

◆对浮动文档和窗口的更好支持

◆增强的文档targeting

◆行为回馈的焦点动画

Web开发

Web开发工具功能得到提升。

◆高性能以及标准化的JavaScript IntelliSense引擎

◆“一键部署”,能够快速将文档和设置发布到将要部署的网站上

◆Silverlight的全面支持

云计算

Visual Studio 2010包含了Windows Azure工具,可以简单的实现在微软云平台上的开发,调试以及部署。

◆C#以及VB云服务项目的模版

◆更改Service Role设置的工具

◆本地开发整合Development Fabric以及Development Storage服务

◆在Development Fabric下的对Cloud Service Roles的调试

◆建立云服务软件包

◆浏览Azure Services Developer Portal

更多数据库支持

现在,开发者除了SQL Server,还可以在IBM DB2以及Oracle数据库下工作。

IBM大力提供了一个Database Schema Provider(DSP),这个DSP可以让DB2在Windows,Linux或Unix平台上工作。在VSTS 2010开发版中,它可以实现离线设计,开发,测试以及更改管理等功能。

Quest Software也做了类似的工作,他们的DSP令Oracle实现了相同的效果。

并行编程

并行编程被简化,本地代码和管理代码的开发者都能够建立具有创造力的应用。

◆并行编程的IDE支持

◆本地C++库,可以使用Lambda函数,并与STL相匹配

◆.NET框架的并行扩展,提供了对必要数据以及任务并行的支持,声明数据并行化,以及其他

◆多核硬件的资源管理,以及Concurrency Runtime允许的任务计划

◆并行调试窗口和图解外观

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值