以文本方式查看主题

-  曙海教育集团论坛  (http://peixun0.cn/bbs/index.asp)
--  VB语言  (http://peixun0.cn/bbs/list.asp?boardid=77)
----  微软 VS2010 中 VB 和 C# 语言的增强  (http://peixun0.cn/bbs/dispbbs.asp?boardid=77&id=2598)

--  作者:wangxinxin
--  发布时间:2010-12-14 13:52:57
--  微软 VS2010 中 VB 和 C# 语言的增强
 

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

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

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(OfString) 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 AsString)
                         If n.StartsWith("s") Then
                             Return "extra " & n
                         Else
                             Return n
                         End If
                     End Function

在Visual Basic 10.0中,和Python及Ruby语言等动态语言的互通操作也变得更加简单。比如,下面的代码片断调用了一个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的一个新功能,能让你用同样的方法使用和操作IronPython、IronRuby、JScript、HTML 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 Basic和C++的编程员来说再熟悉不过。现在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);

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