Soma的博客中文版

Somasegar's WebLog - 原文地址http://blogs.msdn.com/somasegar
随笔 - 126, 评论 - 145, 引用 - 3

导航

关于

Soma是微软全球副总裁,负责微软公司Developer Division的工作。 微软DevDiv上海团队将Soma的网络日志翻译为中文,在这里与大家分享.

每月存档

最新留言

广告

 

[原文发表地址] VB and C# enhancements in VS 2010

[原文发表时间] Wednesday, August 19, 2009 10:54 PM

选择一种编程语言是每一个程序员都要做的个人决定。这就好像对冰淇淋口味的选择一样。冰淇淋口味的选择多多,但你最喜欢的口味只关系到你的个人偏好。

Visual Studio 2010种,为了给程序员提供他们构建出色软件时所需要的所有工具而不用局限于他们所选择的语言,我们从好几个方面增强了我们最流行的两种语言,Visual  BasicC#语言的功能。

Visual Basic

Visual Basic开发团队为了让开发人员可以用更少的代码完成更多的任务,集中增加了和生产力相关的功能特性。Visual Basic客户最常提出的要求是在大多数情况下能省去为代码声明分成多行时所需要添加的下划线(“_”)。Visual Basic 10增加了隐式断行的功能特性,能在大多数情况下不要求开发人员使用下划线来断行。

    Function Filter(

                    ByVal customers As List(Of Customer),

                    ByVal orderCount As Integer

                   )

 

        Dim query =

                    From c In customers

          Where c.Orders.Count >

                orderCount

                    Select c

另一个新添加的和提高生产力有关的功能特性是自动实现属性。有了自动实现属性的功能,多行常规的属性实现的代码就可以用一行简单的声明代替。在加入该功能特性之前,属性声明经常如下所示:

    Private _FavoriteFlavor As String = "Butter Pecan"

 

    Property FavoriteFlavor() As String

        Get

            Return _FavoriteFlavor

        End Get

        Set(ByVal value As String)

            _FavoriteFlavor = value

        End Set

    End Property

 

    Private _FlavorList As New List(Of Flavor)

 

    Property FlavorList() As List(Of Flavor)

        Get

            Return _FlavorList

        End Get

        Set(ByVal value As String)

            _FlavorList = value

        End Set

    End Property

现在,属性声明能用简单的多得方法实现:

    Property FavoriteFlavor As String = "Butter Pecan"

    Property FlavorList As New List(Of Flavor)

集合初始化和数组Literal也变得更加简单。现在集合能在它们被声明的时候就被初始化,而数组Literal的类型能交由编译器来识别。

    Dim toppings = New List(Of String) From

        {

         "sprinkles",

         "chocolate chips",

         "strawberries"

        }

    Dim cones = {"sugar cone", "waffle cone"} 'String()的类型被编译器识别出来

现在,Visual Basic 10.0有了更好的lambda表达式支持。现在,Lambda表达式可以包含没有返回值的表达式,就像下面sub关键词所要表达的那样:

    Array.ForEach(toppings, Sub(n) Console.WriteLine(n))

有时候,你会想在Lamdba表达式声明中作些更复杂的工作。Visual Basic 10.0支持多行的Lamdba表达式。就像在常规Lambda表达式中一样,编译器将尽可能识别变量和返回类型。

    Dim doubleDown = Function(n As String)

                         If n.StartsWith("s") Then

                             Return "extra " & n

                         Else

                             Return n

                         End If

                     End Function

Visual Basic 10.0中,和PythonRuby语言等动态语言的互通操作也变得更加简单。比如,下面的代码片断调用了一个Python库“math.ph”中的方法:

    Dim mathLib As Object = python.UseFile("math.py")

    Dim firstNumber = 44.2

    Dim secondNumber = 9.5

    mathLib.PowerOf(firstNumber, secondNumber)

C#

C# 4.0主要增强了与动态编程语言的互通性并改进了Office编程性。动态查找是C# 4.0的一个新功能,能让你用同样的方法使用和操作IronPythonIronRubyJScriptHTML DOM以及标准.NET库中的对象,不管该对象从哪里获得。命名参数和可选参数,以及对COM客户端支持的改进等语言方面的增强让那些和Office API打交道的C#开发人员与Visual Basic开发人员有同样的美妙体验。

在你的代码中加入新的dynamic关键词能让它的类型在运行时被动态解析而非编译时的静态解析。这让动态语言用一种C#编程员觉得自然的方式在C#语言中暴露他们的对象:

    dynamic dynamicObject = GetDynamicObjectFromRuby();

    dynamicObject.Foo(7);

    dynamicObject.Property = "Property value";

    dynamicObject[0] = "Indexed value";

 

可选方法参数对Visual BasicC++的编程员来说再熟悉不过。现在C#编程员同样可以使用这种参数。可选参数在方法签名中与一个默认值一同声明,如下所示:

    private void CreateNewStudent(string name, int currentCredits = 0, int year = 1)

上面这个方法可以用下面任意一种方法调用:

    CreateNewStudent("Chloe");

    CreateNewStudent("Zoe", 16);

    CreateNewStudent("Joey", 40, 2);

如果要省略currentCredit参数但指明year参数,可以使用新加入的命名参数功能特性(如高亮的代码所示)。下面所有的调用都是合法的:

    CreateNewStudent("Jill", year: 2);

    CreateNewStudent(name: "Bill", currentCredits: 30, year: 2);

    CreateNewStudent("Will", currentCredits: 4);

即使不用可选参数,命名参数同时也是一种用来对你现有方法编写自定义调用的好方法。

学习更多

VB功能特性站点C#功能特性站点,你可以找到更多关于Visual Studio 2010在语言增强方面的内容,并能下载到示例代码。如果你想试试这些新的功能特性,可以下载并安装Visual Studio Beta 1,然后加入到我们的对话中来

Namaste!

打印 | 张贴于 2009-08-24 19:47:12 | Tag:暂无标签

留言反馈

#re:VS2010中VB和C#语言的增强 编辑

??

2009-08-26 14:51:06 | cn2009shoes
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode.MVC引擎 0.5.2.0